summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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