]> git.ipfire.org Git - thirdparty/lldpd.git/commitdiff
bond: reenable the possibility to use a fixed MAC address
authorVincent Bernat <bernat@luffy.cx>
Sun, 11 Aug 2013 19:19:11 +0000 (21:19 +0200)
committerVincent Bernat <bernat@luffy.cx>
Sun, 11 Aug 2013 19:30:16 +0000 (21:30 +0200)
Moreover, this will be the default. The fixed MAC is not configurable.

src/client/conf-system.c
src/client/display.c
src/client/lldpcli.8
src/daemon/interfaces-linux.c
src/daemon/lldpd.c
src/lib/atom-private.c
src/lldp-const.h

index fb33c1040df6b4f7609b73ca7b9f84c5150973a3..c3351b0134f8453c0742a5786a7ad5638fd1f7f9 100644 (file)
@@ -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,
index 3dcc23f43de52520fb32fdd5973d4d8c66d56223..ec57fe5f95f28b585f21efe6c1bbc1df9629dedd 100644 (file)
@@ -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));
 
index b22c772def1dae54e62c8af645e703a6775ec94c..144214d0493f8c78b0d62e9cdd209f99dd55823c 100644 (file)
@@ -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
index 10c04c82f190e3a96997deb35776084d45bdc703..2f362d22983017eb88b335ad0c011992abd83a80 100644 (file)
@@ -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
index c74ca17750385b68ee54aff3b8b6a25118f358e6..9448290a7455a1866734c1bea1e1274042a9204e 100644 (file)
@@ -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");
index 06886c0fa2158b923421ccfe4b52926c199e219b..de2c7e6799ed56025a7d110aa04c5785d78c6db8 100644 (file)
@@ -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},
 };
index 1c5248941ddad594fac58e9aae94cb05c506f273..31b604d19eb517cfd72449b69789ecab0f1dcdbe 100644 (file)
 #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 */