X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_pmd_bond%2Frte_eth_bond_private.h;h=45e5c657a1548d753443561ca5996adb3f59c063;hb=a9a20f37e4f2a5d7ab1734e497026a3071d3b5e2;hp=6254c844203e78485744e9855c53fdbfdfefc18b;hpb=a45b288ef21a5ab1da6bbe95a33404006c7cb051;p=dpdk.git diff --git a/lib/librte_pmd_bond/rte_eth_bond_private.h b/lib/librte_pmd_bond/rte_eth_bond_private.h index 6254c84420..45e5c657a1 100644 --- a/lib/librte_pmd_bond/rte_eth_bond_private.h +++ b/lib/librte_pmd_bond/rte_eth_bond_private.h @@ -34,14 +34,12 @@ #ifndef _RTE_ETH_BOND_PRIVATE_H_ #define _RTE_ETH_BOND_PRIVATE_H_ -#ifdef __cplusplus -extern "C" { -#endif - #include #include #include "rte_eth_bond.h" +#include "rte_eth_bond_8023ad_private.h" +#include "rte_eth_bond_alb.h" #define PMD_BOND_SLAVE_PORT_KVARG ("slave") #define PMD_BOND_PRIMARY_SLAVE_KVARG ("primary") @@ -60,13 +58,15 @@ extern "C" { #define RTE_BOND_LOG(lvl, msg, ...) \ RTE_LOG(lvl, PMD, "%s(%d) - " msg "\n", __func__, __LINE__, ##__VA_ARGS__) +#define BONDING_MODE_INVALID 0xFF + extern const char *pmd_bond_init_valid_arguments[]; extern const char *driver_name; /** Port Queue Mapping Structure */ struct bond_rx_queue { - int queue_id; + uint16_t queue_id; /**< Queue Id */ struct bond_dev_private *dev_private; /**< Reference to eth_dev private structure */ @@ -79,7 +79,7 @@ struct bond_rx_queue { }; struct bond_tx_queue { - int queue_id; + uint16_t queue_id; /**< Queue Id */ struct bond_dev_private *dev_private; /**< Reference to dev private structure */ @@ -89,7 +89,6 @@ struct bond_tx_queue { /**< Copy of TX configuration structure for queue */ }; - /** Bonded slave devices structure */ struct bond_ethdev_slave_ports { uint8_t slaves[RTE_MAX_ETHPORTS]; /**< Slave port id array */ @@ -102,11 +101,13 @@ struct bond_slave_details { uint8_t link_status_poll_enabled; uint8_t link_status_wait_to_complete; uint8_t last_link_status; - /**< Port Id of slave eth_dev */ struct ether_addr persisted_mac_addr; }; + +typedef uint16_t (*xmit_hash_t)(const struct rte_mbuf *buf, uint8_t slave_count); + /** Link Bonding PMD device private configuration Structure */ struct bond_dev_private { uint8_t port_id; /**< Port Id of Bonded Port */ @@ -121,10 +122,13 @@ struct bond_dev_private { uint8_t balance_xmit_policy; /**< Transmit policy - l2 / l23 / l34 for operation in balance mode */ + xmit_hash_t xmit_hash; + /**< Transmit policy hash function */ + uint8_t user_defined_mac; /**< Flag for whether MAC address is user defined or not */ uint8_t promiscuous_en; - /**< Enabled/disable promiscuous mode on slave devices */ + /**< Enabled/disable promiscuous mode on bonding device */ uint8_t link_props_set; /**< flag to denote if the link properties are set */ @@ -144,7 +148,15 @@ struct bond_dev_private { struct bond_slave_details slaves[RTE_MAX_ETHPORTS]; /**< Arary of bonded slaves details */ + struct mode8023ad_private mode4; + uint8_t tlb_slaves_order[RTE_MAX_ETHPORTS]; /* TLB active slaves send order */ + struct mode_alb_private mode6; + + uint32_t rx_offload_capa; /** Rx offload capability */ + uint32_t tx_offload_capa; /** Tx offload capability */ + struct rte_kvargs *kvlist; + uint8_t slave_update_idx; }; extern struct eth_dev_ops default_dev_ops; @@ -152,6 +164,20 @@ extern struct eth_dev_ops default_dev_ops; int valid_bonded_ethdev(struct rte_eth_dev *eth_dev); +/* Search given slave array to find possition of given id. + * Return slave pos or slaves_count if not found. */ +static inline uint8_t +find_slave_by_id(uint8_t *slaves, uint8_t slaves_count, uint8_t slave_id) { + + uint8_t pos; + for (pos = 0; pos < slaves_count; pos++) { + if (slave_id == slaves[pos]) + break; + } + + return pos; +} + int valid_port_id(uint8_t port_id); @@ -161,6 +187,12 @@ valid_bonded_port_id(uint8_t port_id); int valid_slave_port_id(uint8_t port_id); +void +deactivate_slave(struct rte_eth_dev *eth_dev, uint8_t port_id); + +void +activate_slave(struct rte_eth_dev *eth_dev, uint8_t port_id); + void link_properties_set(struct rte_eth_dev *bonded_eth_dev, struct rte_eth_link *slave_dev_link); @@ -174,6 +206,9 @@ link_properties_valid(struct rte_eth_link *bonded_dev_link, int mac_address_set(struct rte_eth_dev *eth_dev, struct ether_addr *new_mac_addr); +int +mac_address_get(struct rte_eth_dev *eth_dev, struct ether_addr *dst_mac_addr); + int mac_address_slaves_update(struct rte_eth_dev *bonded_eth_dev); @@ -195,6 +230,15 @@ void slave_add(struct bond_dev_private *internals, struct rte_eth_dev *slave_eth_dev); +uint16_t +xmit_l2_hash(const struct rte_mbuf *buf, uint8_t slave_count); + +uint16_t +xmit_l23_hash(const struct rte_mbuf *buf, uint8_t slave_count); + +uint16_t +xmit_l34_hash(const struct rte_mbuf *buf, uint8_t slave_count); + void bond_ethdev_primary_set(struct bond_dev_private *internals, uint8_t slave_port_id); @@ -231,8 +275,13 @@ int bond_ethdev_parse_time_ms_kvarg(const char *key __rte_unused, const char *value, void *extra_args); -#ifdef __cplusplus -} -#endif +void +bond_tlb_disable(struct bond_dev_private *internals); + +void +bond_tlb_enable(struct bond_dev_private *internals); + +void +bond_tlb_activate_slave(struct bond_dev_private *internals); #endif