From: Vincent Bernat Date: Sun, 11 Aug 2013 19:19:11 +0000 (+0200) Subject: bond: reenable the possibility to use a fixed MAC address X-Git-Tag: 0.7.7~35 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=2746d430fbcc73fd30eda48087b689f4795d470a;p=thirdparty%2Flldpd.git bond: reenable the possibility to use a fixed MAC address Moreover, this will be the default. The fixed MAC is not configurable. --- diff --git a/src/client/conf-system.c b/src/client/conf-system.c index fb33c104..c3351b01 100644 --- a/src/client/conf-system.c +++ b/src/client/conf-system.c @@ -178,6 +178,14 @@ register_commands_srcmac_type(struct cmd_node *configure) NEWLINE, NULL, NULL, cmd_bondslave_srcmac_type, b_map->string); + } else if (!strcmp(b_map->string, "fixed")) { + commands_new( + commands_new(bond_slave_src_mac_type, + b_map->string, "Fixed value (3Com card)", + NULL, NULL, NULL), + NEWLINE, NULL, + NULL, cmd_bondslave_srcmac_type, + b_map->string); } else if (!strcmp(b_map->string, "local")) { commands_new( commands_new(bond_slave_src_mac_type, diff --git a/src/client/display.c b/src/client/display.c index 3dcc23f4..ec57fe5f 100644 --- a/src/client/display.c +++ b/src/client/display.c @@ -738,7 +738,7 @@ display_configuration(lldpctl_conn_t *conn, struct writer *w) tag_datatag(w, "lldpmed-faststart-interval", "LLDP-MED fast start interval", N(lldpctl_atom_get_str(configuration, lldpctl_k_config_fast_start_interval))); tag_datatag(w, "bond-slave-src-mac-type", - "Src mac for lldp frames on bond slaves", + "Source MAC for LLDP frames on bond slaves", lldpctl_atom_get_str(configuration, lldpctl_k_config_bond_slave_src_mac_type)); diff --git a/src/client/lldpcli.8 b/src/client/lldpcli.8 index b22c772d..144214d0 100644 --- a/src/client/lldpcli.8 +++ b/src/client/lldpcli.8 @@ -238,15 +238,17 @@ Valid types are: Slave real mac .It Sy zero All zero mac +.It Sy fixed +An arbitrary fixed value (from a 3Com card) .It Sy local Real mac with locally administered bit set. If the real mac already -has the locally administered bit set, default to zero mac. +has the locally administered bit set, default to the fixed value. .El .Pp Default value for .Nm bond-slave-src-mac-type is -.Nm local +.Nm fixed .Ed .Cd configure med fast-start diff --git a/src/daemon/interfaces-linux.c b/src/daemon/interfaces-linux.c index 10c04c82..2f362d22 100644 --- a/src/daemon/interfaces-linux.c +++ b/src/daemon/interfaces-linux.c @@ -477,35 +477,24 @@ static void iface_mangle_mac(struct lldpd *cfg, char *src_mac) { #define MAC_UL_ADMINISTERED_BIT_MASK 0x02 + char arbitrary[] = { 0x00, 0x60, 0x08, 0x69, 0x97, 0xef}; - if (cfg->g_config.c_bond_slave_src_mac_type == - LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED) { - if (*src_mac & MAC_UL_ADMINISTERED_BIT_MASK) + switch (cfg->g_config.c_bond_slave_src_mac_type) { + case LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED: + if (*src_mac & MAC_UL_ADMINISTERED_BIT_MASK) { /* If locally administered bit already set, * use zero mac */ memset(src_mac, 0, ETHER_ADDR_LEN); - else - *src_mac |= MAC_UL_ADMINISTERED_BIT_MASK; - } else if (cfg->g_config.c_bond_slave_src_mac_type == - LLDP_BOND_SLAVE_SRC_MAC_TYPE_ZERO) { + return; + } + case LLDP_BOND_SLAVE_SRC_MAC_TYPE_FIXED: + memcpy(src_mac, arbitrary, ETHER_ADDR_LEN); + return; + case LLDP_BOND_SLAVE_SRC_MAC_TYPE_ZERO: memset(src_mac, 0, ETHER_ADDR_LEN); - } - /* If cfg->g_config.c_bond_slave_src_mac_type is - * LLDP_BOND_SLAVE_SRC_MAC_TYPE_UNKNOWN or - * LLDP_BOND_SLAVE_SRC_MAC_TYPE_REAL, dont change mac - */ - -#if 0 - if (buffer[0] & 2) { - /* Already a locally administered MAC address, use a fixed MAC - * address (an old 3c905 MAC address of a card that I own). */ - char arbitrary[] = { 0x00, 0x60, 0x08, 0x69, 0x97, 0xef}; - memcpy(buffer, arbitrary, sizeof(arbitrary)); return; } - buffer[0] |= 2; -#endif } static int diff --git a/src/daemon/lldpd.c b/src/daemon/lldpd.c index c74ca177..9448290a 100644 --- a/src/daemon/lldpd.c +++ b/src/daemon/lldpd.c @@ -1481,7 +1481,7 @@ lldpd_main(int argc, char *argv[], char *envp[]) cfg->g_snmp_agentx = agentx; #endif /* USE_SNMP */ cfg->g_config.c_bond_slave_src_mac_type = \ - LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED; + LLDP_BOND_SLAVE_SRC_MAC_TYPE_FIXED; /* Get ioctl socket */ log_debug("main", "get an ioctl socket"); diff --git a/src/lib/atom-private.c b/src/lib/atom-private.c index 06886c0f..de2c7e67 100644 --- a/src/lib/atom-private.c +++ b/src/lib/atom-private.c @@ -263,6 +263,7 @@ static lldpctl_map_t *port_med_pow_priority_map = port_dot3_power_priority_map; static lldpctl_map_t bond_slave_src_mac_map[] = { { LLDP_BOND_SLAVE_SRC_MAC_TYPE_REAL, "real"}, { LLDP_BOND_SLAVE_SRC_MAC_TYPE_ZERO, "zero"}, + { LLDP_BOND_SLAVE_SRC_MAC_TYPE_FIXED, "fixed"}, { LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED, "local" }, { LLDP_BOND_SLAVE_SRC_MAC_TYPE_UNKNOWN, NULL}, }; diff --git a/src/lldp-const.h b/src/lldp-const.h index 1c524894..31b604d1 100644 --- a/src/lldp-const.h +++ b/src/lldp-const.h @@ -220,7 +220,8 @@ #define LLDP_BOND_SLAVE_SRC_MAC_TYPE_UNKNOWN 0 #define LLDP_BOND_SLAVE_SRC_MAC_TYPE_REAL 1 #define LLDP_BOND_SLAVE_SRC_MAC_TYPE_ZERO 2 -#define LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED 3 +#define LLDP_BOND_SLAVE_SRC_MAC_TYPE_FIXED 3 +#define LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED 4 #define LLDP_BOND_SLAVE_SRC_MAC_TYPE_MAX LLDP_BOND_SLAVE_SRC_MAC_TYPE_LOCALLY_ADMINISTERED #endif /* _LLDP_H */