Changeset View
Changeset View
Standalone View
Standalone View
sbin/ifconfig/ifbridge.c
Show First 20 Lines • Show All 118 Lines • ▼ Show 20 Lines | |||||
} | } | ||||
static void | static void | ||||
bridge_addresses(int s, const char *prefix) | bridge_addresses(int s, const char *prefix) | ||||
{ | { | ||||
struct ifbaconf ifbac; | struct ifbaconf ifbac; | ||||
struct ifbareq *ifba; | struct ifbareq *ifba; | ||||
char *inbuf = NULL, *ninbuf; | char *inbuf = NULL, *ninbuf; | ||||
int i, len = 8192; | size_t len = 8192; | ||||
struct ether_addr ea; | struct ether_addr ea; | ||||
for (;;) { | for (;;) { | ||||
ninbuf = realloc(inbuf, len); | ninbuf = realloc(inbuf, len); | ||||
if (ninbuf == NULL) | if (ninbuf == NULL) | ||||
err(1, "unable to allocate address buffer"); | err(1, "unable to allocate address buffer"); | ||||
ifbac.ifbac_len = len; | ifbac.ifbac_len = len; | ||||
ifbac.ifbac_buf = inbuf = ninbuf; | ifbac.ifbac_buf = inbuf = ninbuf; | ||||
if (do_cmd(s, BRDGRTS, &ifbac, sizeof(ifbac), 0) < 0) | if (do_cmd(s, BRDGRTS, &ifbac, sizeof(ifbac), 0) < 0) | ||||
err(1, "unable to get address cache"); | err(1, "unable to get address cache"); | ||||
if ((ifbac.ifbac_len + sizeof(*ifba)) < len) | if ((ifbac.ifbac_len + sizeof(*ifba)) < len) | ||||
break; | break; | ||||
len *= 2; | len *= 2; | ||||
} | } | ||||
for (i = 0; i < ifbac.ifbac_len / sizeof(*ifba); i++) { | for (unsigned long i = 0; i < ifbac.ifbac_len / sizeof(*ifba); i++) { | ||||
ifba = ifbac.ifbac_req + i; | ifba = ifbac.ifbac_req + i; | ||||
memcpy(ea.octet, ifba->ifba_dst, | memcpy(ea.octet, ifba->ifba_dst, | ||||
sizeof(ea.octet)); | sizeof(ea.octet)); | ||||
printf("%s%s Vlan%d %s %lu ", prefix, ether_ntoa(&ea), | printf("%s%s Vlan%d %s %lu ", prefix, ether_ntoa(&ea), | ||||
ifba->ifba_vlan, ifba->ifba_ifsname, ifba->ifba_expire); | ifba->ifba_vlan, ifba->ifba_ifsname, ifba->ifba_expire); | ||||
printb("flags", ifba->ifba_flags, IFBAFBITS); | printb("flags", ifba->ifba_flags, IFBAFBITS); | ||||
printf("\n"); | printf("\n"); | ||||
} | } | ||||
▲ Show 20 Lines • Show All 526 Lines • ▼ Show 20 Lines | static struct afswtch af_bridge = { | ||||
.af_name = "af_bridge", | .af_name = "af_bridge", | ||||
.af_af = AF_UNSPEC, | .af_af = AF_UNSPEC, | ||||
.af_other_status = bridge_status, | .af_other_status = bridge_status, | ||||
}; | }; | ||||
static __constructor void | static __constructor void | ||||
bridge_ctor(void) | bridge_ctor(void) | ||||
{ | { | ||||
int i; | for (size_t i = 0; i < nitems(bridge_cmds); i++) | ||||
for (i = 0; i < nitems(bridge_cmds); i++) | |||||
cmd_register(&bridge_cmds[i]); | cmd_register(&bridge_cmds[i]); | ||||
af_register(&af_bridge); | af_register(&af_bridge); | ||||
} | } |