summaryrefslogtreecommitdiffstats
path: root/sys/net
diff options
context:
space:
mode:
authorru <ru@FreeBSD.org>2005-11-11 07:36:14 +0000
committerru <ru@FreeBSD.org>2005-11-11 07:36:14 +0000
commited1132ceab2c722cdbb8d3cf5a717b07ee5ff2c0 (patch)
tree4d7e562715c0e571dbcf93217dd79abe8f2fb3dd /sys/net
parent1ec898f53b484ad30595658bdf47c994728abe50 (diff)
downloadFreeBSD-src-ed1132ceab2c722cdbb8d3cf5a717b07ee5ff2c0.zip
FreeBSD-src-ed1132ceab2c722cdbb8d3cf5a717b07ee5ff2c0.tar.gz
- Make IFP2ENADDR() a pointer to IF_LLADDR() rather than another
copy of Ethernet address. - Change iso88025_ifattach() and fddi_ifattach() to accept MAC address as an argument, similar to ether_ifattach(), to make this work.
Diffstat (limited to 'sys/net')
-rw-r--r--sys/net/fddi.h2
-rw-r--r--sys/net/if.c10
-rw-r--r--sys/net/if_arp.h2
-rw-r--r--sys/net/if_ethersubr.c15
-rw-r--r--sys/net/if_fddisubr.c6
-rw-r--r--sys/net/if_iso88025subr.c5
-rw-r--r--sys/net/if_vlan.c20
-rw-r--r--sys/net/iso88025.h2
8 files changed, 18 insertions, 44 deletions
diff --git a/sys/net/fddi.h b/sys/net/fddi.h
index a488f29..869a8d9 100644
--- a/sys/net/fddi.h
+++ b/sys/net/fddi.h
@@ -97,7 +97,7 @@ struct fddi_header {
#define FDDI_BPF_UNSUPPORTED 0
#define FDDI_BPF_SUPPORTED 1
-void fddi_ifattach(struct ifnet *, int);
+void fddi_ifattach(struct ifnet *, const u_int8_t *, int);
void fddi_ifdetach(struct ifnet *, int);
int fddi_ioctl(struct ifnet *, int, caddr_t);
diff --git a/sys/net/if.c b/sys/net/if.c
index 31d286b..be7b842 100644
--- a/sys/net/if.c
+++ b/sys/net/if.c
@@ -59,7 +59,6 @@
#include <machine/stdarg.h>
#include <net/if.h>
-#include <net/if_arp.h>
#include <net/if_clone.h>
#include <net/if_dl.h>
#include <net/if_types.h>
@@ -2101,19 +2100,12 @@ if_setlladdr(struct ifnet *ifp, const u_char *lladdr, int len)
if (len != sdl->sdl_alen) /* don't allow length to change */
return (EINVAL);
switch (ifp->if_type) {
- case IFT_ETHER: /* these types use struct arpcom */
+ case IFT_ETHER:
case IFT_FDDI:
case IFT_XETHER:
case IFT_ISO88025:
case IFT_L2VLAN:
case IFT_BRIDGE:
- bcopy(lladdr, IFP2ENADDR(ifp), len);
- /*
- * XXX We also need to store the lladdr in LLADDR(sdl),
- * which is done below. This is a pain because we must
- * remember to keep the info in sync.
- */
- /* FALLTHROUGH */
case IFT_ARCNET:
bcopy(lladdr, LLADDR(sdl), len);
break;
diff --git a/sys/net/if_arp.h b/sys/net/if_arp.h
index 9aa63c6..c9cd15f 100644
--- a/sys/net/if_arp.h
+++ b/sys/net/if_arp.h
@@ -103,7 +103,7 @@ struct arpreq {
*/
struct arpcom {
struct ifnet *ac_ifp; /* network-visible interface */
- u_char _ac_enaddr[6]; /* ethernet hardware address */
+ u_char *_ac_enaddr; /* ethernet hardware address */
void *ac_netgraph; /* ng_ether(4) netgraph node info */
};
#define IFP2AC(ifp) ((struct arpcom *)(ifp->if_l2com))
diff --git a/sys/net/if_ethersubr.c b/sys/net/if_ethersubr.c
index 9a8c416..9288a7f 100644
--- a/sys/net/if_ethersubr.c
+++ b/sys/net/if_ethersubr.c
@@ -846,7 +846,7 @@ ether_sprintf(const u_char *ap)
* Perform common duties while attaching to interface list
*/
void
-ether_ifattach(struct ifnet *ifp, const u_int8_t *llc)
+ether_ifattach(struct ifnet *ifp, const u_int8_t *lla)
{
int i;
struct ifaddr *ifa;
@@ -868,13 +868,8 @@ ether_ifattach(struct ifnet *ifp, const u_int8_t *llc)
sdl = (struct sockaddr_dl *)ifa->ifa_addr;
sdl->sdl_type = IFT_ETHER;
sdl->sdl_alen = ifp->if_addrlen;
- bcopy(llc, LLADDR(sdl), ifp->if_addrlen);
- /*
- * XXX: This doesn't belong here; we do it until
- * XXX: all drivers are cleaned up
- */
- if (llc != IFP2ENADDR(ifp))
- bcopy(llc, IFP2ENADDR(ifp), ifp->if_addrlen);
+ bcopy(lla, LLADDR(sdl), ifp->if_addrlen);
+ IFP2ENADDR(ifp) = LLADDR(sdl);
bpfattach(ifp, DLT_EN10MB, ETHER_HDR_LEN);
if (ng_ether_attach_p != NULL)
@@ -882,10 +877,10 @@ ether_ifattach(struct ifnet *ifp, const u_int8_t *llc)
/* Announce Ethernet MAC address if non-zero. */
for (i = 0; i < ifp->if_addrlen; i++)
- if (llc[i] != 0)
+ if (lla[i] != 0)
break;
if (i != ifp->if_addrlen)
- if_printf(ifp, "Ethernet address: %6D\n", llc, ":");
+ if_printf(ifp, "Ethernet address: %6D\n", lla, ":");
if (debug_mpsafenet && (ifp->if_flags & IFF_NEEDSGIANT) != 0)
if_printf(ifp, "if_start running deferred for Giant\n");
}
diff --git a/sys/net/if_fddisubr.c b/sys/net/if_fddisubr.c
index ed33313..917ed66 100644
--- a/sys/net/if_fddisubr.c
+++ b/sys/net/if_fddisubr.c
@@ -556,8 +556,9 @@ dropanyway:
* Perform common duties while attaching to interface list
*/
void
-fddi_ifattach(ifp, bpf)
+fddi_ifattach(ifp, lla, bpf)
struct ifnet *ifp;
+ const u_int8_t *lla;
int bpf;
{
struct ifaddr *ifa;
@@ -587,7 +588,8 @@ fddi_ifattach(ifp, bpf)
sdl = (struct sockaddr_dl *)ifa->ifa_addr;
sdl->sdl_type = IFT_FDDI;
sdl->sdl_alen = ifp->if_addrlen;
- bcopy(IFP2ENADDR(ifp), LLADDR(sdl), ifp->if_addrlen);
+ bcopy(lla, LLADDR(sdl), ifp->if_addrlen);
+ IFP2ENADDR(ifp) = LLADDR(sdl);
if (bpf)
bpfattach(ifp, DLT_FDDI, FDDI_HDR_LEN);
diff --git a/sys/net/if_iso88025subr.c b/sys/net/if_iso88025subr.c
index 5e8382fa..d78de12 100644
--- a/sys/net/if_iso88025subr.c
+++ b/sys/net/if_iso88025subr.c
@@ -91,7 +91,7 @@ static int iso88025_resolvemulti (struct ifnet *, struct sockaddr **,
* Perform common duties while attaching to interface list
*/
void
-iso88025_ifattach(struct ifnet *ifp, int bpf)
+iso88025_ifattach(struct ifnet *ifp, const u_int8_t *lla, int bpf)
{
struct ifaddr *ifa;
struct sockaddr_dl *sdl;
@@ -123,7 +123,8 @@ iso88025_ifattach(struct ifnet *ifp, int bpf)
sdl = (struct sockaddr_dl *)ifa->ifa_addr;
sdl->sdl_type = IFT_ISO88025;
sdl->sdl_alen = ifp->if_addrlen;
- bcopy(IFP2ENADDR(ifp), LLADDR(sdl), ifp->if_addrlen);
+ bcopy(lla, LLADDR(sdl), ifp->if_addrlen);
+ IFP2ENADDR(ifp) = LLADDR(sdl);
if (bpf)
bpfattach(ifp, DLT_IEEE802, ISO88025_HDR_LEN);
diff --git a/sys/net/if_vlan.c b/sys/net/if_vlan.c
index b8b0703..e0377e2 100644
--- a/sys/net/if_vlan.c
+++ b/sys/net/if_vlan.c
@@ -663,9 +663,7 @@ vlan_input(struct ifnet *ifp, struct mbuf *m)
static int
vlan_config(struct ifvlan *ifv, struct ifnet *p)
{
- struct ifaddr *ifa1, *ifa2;
struct ifnet *ifp;
- struct sockaddr_dl *sdl1, *sdl2;
VLAN_LOCK_ASSERT();
@@ -741,14 +739,7 @@ vlan_config(struct ifvlan *ifv, struct ifnet *p)
* Set up our ``Ethernet address'' to reflect the underlying
* physical interface's.
*/
- ifa1 = ifaddr_byindex(ifp->if_index);
- ifa2 = ifaddr_byindex(p->if_index);
- sdl1 = (struct sockaddr_dl *)ifa1->ifa_addr;
- sdl2 = (struct sockaddr_dl *)ifa2->ifa_addr;
- sdl1->sdl_type = IFT_ETHER;
- sdl1->sdl_alen = ETHER_ADDR_LEN;
- bcopy(LLADDR(sdl2), LLADDR(sdl1), ETHER_ADDR_LEN);
- bcopy(LLADDR(sdl2), IFP2ENADDR(ifp), ETHER_ADDR_LEN);
+ bcopy(IF_LLADDR(p), IF_LLADDR(ifp), ETHER_ADDR_LEN);
/*
* Configure multicast addresses that may already be
@@ -762,8 +753,6 @@ vlan_config(struct ifvlan *ifv, struct ifnet *p)
static int
vlan_unconfig(struct ifnet *ifp)
{
- struct ifaddr *ifa;
- struct sockaddr_dl *sdl;
struct vlan_mc_entry *mc;
struct ifvlan *ifv;
struct ifnet *p;
@@ -812,12 +801,7 @@ vlan_unconfig(struct ifnet *ifp)
ifv->ifv_ifp->if_link_state = LINK_STATE_UNKNOWN;
/* Clear our MAC address. */
- ifa = ifaddr_byindex(ifv->ifv_ifp->if_index);
- sdl = (struct sockaddr_dl *)ifa->ifa_addr;
- sdl->sdl_type = IFT_ETHER;
- sdl->sdl_alen = ETHER_ADDR_LEN;
- bzero(LLADDR(sdl), ETHER_ADDR_LEN);
- bzero(IFP2ENADDR(ifv->ifv_ifp), ETHER_ADDR_LEN);
+ bzero(IF_LLADDR(ifv->ifv_ifp), ETHER_ADDR_LEN);
return (0);
}
diff --git a/sys/net/iso88025.h b/sys/net/iso88025.h
index 88d6d34..cb10874 100644
--- a/sys/net/iso88025.h
+++ b/sys/net/iso88025.h
@@ -162,7 +162,7 @@ struct iso88025_addr {
#define ISO88025_BPF_UNSUPPORTED 0
#define ISO88025_BPF_SUPPORTED 1
-void iso88025_ifattach (struct ifnet *, int);
+void iso88025_ifattach (struct ifnet *, const u_int8_t *, int);
void iso88025_ifdetach (struct ifnet *, int);
int iso88025_ioctl (struct ifnet *, int , caddr_t );
int iso88025_output (struct ifnet *, struct mbuf *, struct sockaddr *,
OpenPOWER on IntegriCloud