summaryrefslogtreecommitdiffstats
path: root/sys/netgraph
diff options
context:
space:
mode:
authorjulian <julian@FreeBSD.org>2001-02-26 09:31:54 +0000
committerjulian <julian@FreeBSD.org>2001-02-26 09:31:54 +0000
commit2023ed4023adb90dd28ca1be607c88428c6c296d (patch)
treed0395b37a07c83686740618bdc52bb0d163ec9a2 /sys/netgraph
parent0b712aa9abb7512d53a33d29de92898aeb00ae00 (diff)
downloadFreeBSD-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.c2
-rw-r--r--sys/netgraph/ng_eiface.c13
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;
}
OpenPOWER on IntegriCloud