diff options
author | julian <julian@FreeBSD.org> | 2001-02-26 09:31:54 +0000 |
---|---|---|
committer | julian <julian@FreeBSD.org> | 2001-02-26 09:31:54 +0000 |
commit | 2023ed4023adb90dd28ca1be607c88428c6c296d (patch) | |
tree | d0395b37a07c83686740618bdc52bb0d163ec9a2 /sys/netgraph | |
parent | 0b712aa9abb7512d53a33d29de92898aeb00ae00 (diff) | |
download | FreeBSD-src-2023ed4023adb90dd28ca1be607c88428c6c296d.zip FreeBSD-src-2023ed4023adb90dd28ca1be607c88428c6c296d.tar.gz |
Allow a changed MAC address to show up in ifconfig by changing it
in the ifaddr list as well. Also change an error return in the base system.
Diffstat (limited to 'sys/netgraph')
-rw-r--r-- | sys/netgraph/ng_base.c | 2 | ||||
-rw-r--r-- | sys/netgraph/ng_eiface.c | 13 |
2 files changed, 14 insertions, 1 deletions
diff --git a/sys/netgraph/ng_base.c b/sys/netgraph/ng_base.c index 5e72d914..dbcc208 100644 --- a/sys/netgraph/ng_base.c +++ b/sys/netgraph/ng_base.c @@ -3436,7 +3436,7 @@ ng_address_hook(node_p here, item_p item, hook_p hook, ng_ID_t retaddr) || NG_NODE_NOT_VALID(NG_PEER_NODE(hook))) { NG_FREE_ITEM(item); TRAP_ERROR(); - return (EINVAL); + return (ENETDOWN); } /* diff --git a/sys/netgraph/ng_eiface.c b/sys/netgraph/ng_eiface.c index 0e06810..2959d93 100644 --- a/sys/netgraph/ng_eiface.c +++ b/sys/netgraph/ng_eiface.c @@ -41,6 +41,7 @@ #include <sys/syslog.h> #include <net/if.h> +#include <net/if_dl.h> #include <net/if_types.h> #include <net/netisr.h> @@ -498,6 +499,8 @@ ng_eiface_rcvmsg(node_p node, item_p item, hook_p lasthook) case NGM_EIFACE_SET: { struct ng_eiface_par *eaddr; + struct ifaddr *ifa; + struct sockaddr_dl *sdl; if (msg->header.arglen != sizeof(struct ng_eiface_par)){ error = EINVAL; @@ -512,6 +515,16 @@ ng_eiface_rcvmsg(node_p node, item_p item, hook_p lasthook) priv->arpcom.ac_enaddr[4] = eaddr->oct4; priv->arpcom.ac_enaddr[5] = eaddr->oct5; + /* And put it in the ifaddr list */ +#define IFP2AC(IFP) ((struct arpcom *)IFP) + TAILQ_FOREACH(ifa, &(ifp->if_addrhead), ifa_link) { + sdl = (struct sockaddr_dl *)ifa->ifa_addr; + if (sdl->sdl_type == IFT_ETHER) { + bcopy((IFP2AC(ifp))->ac_enaddr, + LLADDR(sdl), ifp->if_addrlen); + break; + } + } break; } |