Moreover, this will be the default. The fixed MAC is not configurable.
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,
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));
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
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
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");
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},
};
#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 */