Skip to content

Commit

Permalink
net: add DCNA attribute to the BCN interface for DCB
Browse files Browse the repository at this point in the history
Adds the Backward Congestion Notification Address (BCNA) attribute to the
Backward Congestion Notification (BCN) interface for Data Center Bridging
(DCB), which was missing.  Receive the BCNA attribute in the ixgbe driver.
The BCNA attribute is for a switch to inform the endstation about the physical
port identification in order to support BCN on aggregated links.

Signed-off-by: Don Skidmore <donald.c.skidmore@intel.com>
Signed-off-by: Eric W Multanen <eric.w.multanen@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Don Skidmore authored and David S. Miller committed Dec 22, 2008
1 parent 1486a61 commit f4314e8
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 2 deletions.
20 changes: 20 additions & 0 deletions drivers/net/ixgbe/ixgbe_dcb_nl.c
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,8 @@ int ixgbe_copy_dcb_cfg(struct ixgbe_dcb_config *src_dcb_cfg,
dst_dcb_cfg->bcn.rp_admin_mode[i - DCB_BCN_ATTR_RP_0] =
src_dcb_cfg->bcn.rp_admin_mode[i - DCB_BCN_ATTR_RP_0];
}
dst_dcb_cfg->bcn.bcna_option[0] = src_dcb_cfg->bcn.bcna_option[0];
dst_dcb_cfg->bcn.bcna_option[1] = src_dcb_cfg->bcn.bcna_option[1];
dst_dcb_cfg->bcn.rp_alpha = src_dcb_cfg->bcn.rp_alpha;
dst_dcb_cfg->bcn.rp_beta = src_dcb_cfg->bcn.rp_beta;
dst_dcb_cfg->bcn.rp_gd = src_dcb_cfg->bcn.rp_gd;
Expand Down Expand Up @@ -457,6 +459,12 @@ static void ixgbe_dcbnl_getbcncfg(struct net_device *netdev, int enum_index,
struct ixgbe_adapter *adapter = netdev_priv(netdev);

switch (enum_index) {
case DCB_BCN_ATTR_BCNA_0:
*setting = adapter->dcb_cfg.bcn.bcna_option[0];
break;
case DCB_BCN_ATTR_BCNA_1:
*setting = adapter->dcb_cfg.bcn.bcna_option[1];
break;
case DCB_BCN_ATTR_ALPHA:
*setting = adapter->dcb_cfg.bcn.rp_alpha;
break;
Expand Down Expand Up @@ -516,6 +524,18 @@ static void ixgbe_dcbnl_setbcncfg(struct net_device *netdev, int enum_index,
struct ixgbe_adapter *adapter = netdev_priv(netdev);

switch (enum_index) {
case DCB_BCN_ATTR_BCNA_0:
adapter->temp_dcb_cfg.bcn.bcna_option[0] = setting;
if (adapter->temp_dcb_cfg.bcn.bcna_option[0] !=
adapter->dcb_cfg.bcn.bcna_option[0])
adapter->dcb_set_bitmap |= BIT_BCN;
break;
case DCB_BCN_ATTR_BCNA_1:
adapter->temp_dcb_cfg.bcn.bcna_option[1] = setting;
if (adapter->temp_dcb_cfg.bcn.bcna_option[1] !=
adapter->dcb_cfg.bcn.bcna_option[1])
adapter->dcb_set_bitmap |= BIT_BCN;
break;
case DCB_BCN_ATTR_ALPHA:
adapter->temp_dcb_cfg.bcn.rp_alpha = setting;
if (adapter->temp_dcb_cfg.bcn.rp_alpha !=
Expand Down
2 changes: 2 additions & 0 deletions include/linux/dcbnl.h
Original file line number Diff line number Diff line change
Expand Up @@ -305,6 +305,8 @@ enum dcbnl_bcn_attrs{
DCB_BCN_ATTR_RP_7,
DCB_BCN_ATTR_RP_ALL,

DCB_BCN_ATTR_BCNA_0,
DCB_BCN_ATTR_BCNA_1,
DCB_BCN_ATTR_ALPHA,
DCB_BCN_ATTR_BETA,
DCB_BCN_ATTR_GD,
Expand Down
6 changes: 4 additions & 2 deletions net/dcb/dcbnl.c
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,8 @@ static struct nla_policy dcbnl_bcn_nest[DCB_BCN_ATTR_MAX + 1] = {
[DCB_BCN_ATTR_RP_6] = {.type = NLA_U8},
[DCB_BCN_ATTR_RP_7] = {.type = NLA_U8},
[DCB_BCN_ATTR_RP_ALL] = {.type = NLA_FLAG},
[DCB_BCN_ATTR_BCNA_0] = {.type = NLA_U32},
[DCB_BCN_ATTR_BCNA_1] = {.type = NLA_U32},
[DCB_BCN_ATTR_ALPHA] = {.type = NLA_U32},
[DCB_BCN_ATTR_BETA] = {.type = NLA_U32},
[DCB_BCN_ATTR_GD] = {.type = NLA_U32},
Expand Down Expand Up @@ -922,7 +924,7 @@ static int dcbnl_bcn_getcfg(struct net_device *netdev, struct nlattr **tb,
goto err_bcn;
}

for (i = DCB_BCN_ATTR_ALPHA; i <= DCB_BCN_ATTR_RI; i++) {
for (i = DCB_BCN_ATTR_BCNA_0; i <= DCB_BCN_ATTR_RI; i++) {
if (!getall && !bcn_tb[i])
continue;

Expand Down Expand Up @@ -980,7 +982,7 @@ static int dcbnl_bcn_setcfg(struct net_device *netdev, struct nlattr **tb,
data[i]->nla_type - DCB_BCN_ATTR_RP_0, value_byte);
}

for (i = DCB_BCN_ATTR_ALPHA; i <= DCB_BCN_ATTR_RI; i++) {
for (i = DCB_BCN_ATTR_BCNA_0; i <= DCB_BCN_ATTR_RI; i++) {
if (data[i] == NULL)
continue;
value_int = nla_get_u32(data[i]);
Expand Down

0 comments on commit f4314e8

Please sign in to comment.