diff options
author | ru <ru@FreeBSD.org> | 2005-11-04 16:29:51 +0000 |
---|---|---|
committer | ru <ru@FreeBSD.org> | 2005-11-04 16:29:51 +0000 |
commit | 1aceee70b0e0f10ab5c1556417c9a033f8342137 (patch) | |
tree | 5545439559a4be0f44d4b246a298dd84b9384996 /sys/netgraph | |
parent | 8a9d6ba9030dfc2edcfe56d57ec03ce610b692de (diff) | |
download | FreeBSD-src-1aceee70b0e0f10ab5c1556417c9a033f8342137.zip FreeBSD-src-1aceee70b0e0f10ab5c1556417c9a033f8342137.tar.gz |
Use if_setlladdr() to reprogram the link-level addresses; it causes
a synchronous reprogramming of hardware MAC filters if the physical
interface are up and running. Previously, MAC filters would be
reconfigured only when the fec interface was brought up.
Diffstat (limited to 'sys/netgraph')
-rw-r--r-- | sys/netgraph/ng_fec.c | 25 |
1 files changed, 4 insertions, 21 deletions
diff --git a/sys/netgraph/ng_fec.c b/sys/netgraph/ng_fec.c index 84b5db6..a4ee15d 100644 --- a/sys/netgraph/ng_fec.c +++ b/sys/netgraph/ng_fec.c @@ -104,7 +104,6 @@ #include <net/if.h> #include <net/if_types.h> #include <net/if_arp.h> -#include <net/if_dl.h> #include <net/if_media.h> #include <net/bpf.h> #include <net/ethernet.h> @@ -345,8 +344,6 @@ ng_fec_addport(struct ng_fec_private *priv, char *iface) { struct ng_fec_bundle *b; struct ifnet *ifp, *bifp; - struct ifaddr *ifa; - struct sockaddr_dl *sdl; struct ng_fec_portlist *p, *new; if (priv == NULL || iface == NULL) @@ -415,14 +412,8 @@ ng_fec_addport(struct ng_fec_private *priv, char *iface) * use its MAC address for the virtual interface (and, * by extension, all the other ports in the bundle). */ - if (b->fec_ifcnt == 0) { - ifa = ifaddr_byindex(ifp->if_index); - sdl = (struct sockaddr_dl *)ifa->ifa_addr; - bcopy(IFP2ENADDR(bifp), - IFP2ENADDR(priv->ifp), ETHER_ADDR_LEN); - bcopy(IFP2ENADDR(bifp), - LLADDR(sdl), ETHER_ADDR_LEN); - } + if (b->fec_ifcnt == 0) + if_setlladdr(ifp, IFP2ENADDR(bifp), ETHER_ADDR_LEN); b->fec_btype = FEC_BTYPE_MAC; new->fec_idx = b->fec_ifcnt; @@ -433,10 +424,7 @@ ng_fec_addport(struct ng_fec_private *priv, char *iface) (char *)&new->fec_mac, ETHER_ADDR_LEN); /* Set up phony MAC address. */ - ifa = ifaddr_byindex(bifp->if_index); - sdl = (struct sockaddr_dl *)ifa->ifa_addr; - bcopy(IFP2ENADDR(priv->ifp), IFP2ENADDR(bifp), ETHER_ADDR_LEN); - bcopy(IFP2ENADDR(priv->ifp), LLADDR(sdl), ETHER_ADDR_LEN); + if_setlladdr(bifp, IFP2ENADDR(ifp), ETHER_ADDR_LEN); /* Save original input vector */ new->fec_if_input = bifp->if_input; @@ -461,8 +449,6 @@ ng_fec_delport(struct ng_fec_private *priv, char *iface) { struct ng_fec_bundle *b; struct ifnet *ifp, *bifp; - struct ifaddr *ifa; - struct sockaddr_dl *sdl; struct ng_fec_portlist *p; if (priv == NULL || iface == NULL) @@ -502,10 +488,7 @@ ng_fec_delport(struct ng_fec_private *priv, char *iface) (*bifp->if_ioctl)(bifp, SIOCSIFFLAGS, NULL); /* Restore MAC address. */ - ifa = ifaddr_byindex(bifp->if_index); - sdl = (struct sockaddr_dl *)ifa->ifa_addr; - bcopy((char *)&p->fec_mac, IFP2ENADDR(bifp), ETHER_ADDR_LEN); - bcopy((char *)&p->fec_mac, LLADDR(sdl), ETHER_ADDR_LEN); + if_setlladdr(bifp, (u_char *)&p->fec_mac, ETHER_ADDR_LEN); /* Restore input vector */ bifp->if_input = p->fec_if_input; |