Commit Diff


commit - 51b2002482faac9a8d4a8ebde27562ff64cd55fd
commit + 1237836a7fdcf2b703269bf13e4fc3e60125fbca
blob - 48c87c621c78058be742f99a8a4f26dbc43d32b5
blob + 8710a5fd530dec2ddbe9ceb3cce3e269fb0329cf
--- src/libip/Darwin.c
+++ src/libip/Darwin.c
@@ -1 +1 @@
-#include "none.c"
+#include "BSD.c"
blob - /dev/null
blob + 9bf2db0c22d2b7b1f996df09b031335b90f60379 (mode 644)
--- /dev/null
+++ src/libip/BSD.c
@@ -0,0 +1,146 @@
+#include <u.h>
+/* #include <everything_but_the_kitchen_sink.h> */
+#include <sys/socket.h>
+#include <netinet/in.h>
+#include <net/if.h>
+#include <sys/ioctl.h>
+#include <sys/sysctl.h>
+#include <net/ethernet.h>
+#include <net/if.h>
+#include <net/if_var.h>
+#include <net/if_dl.h>
+#include <net/if_types.h>
+#include <net/route.h>
+#include <netinet/in.h>
+#include <netinet/in_var.h>
+#include <arpa/inet.h>
+#include <netdb.h>
+#include <libc.h>
+#include <ip.h>
+
+static void
+sockaddr2ip(uchar *ip, struct sockaddr *sa)
+{
+	struct sockaddr_in *sin;
+	
+	sin = (struct sockaddr_in*)sa;
+	memmove(ip, v4prefix, IPaddrlen);
+	memmove(ip+IPv4off, &sin->sin_addr, 4);
+}
+
+Ipifc*
+readipifc(char *net, Ipifc *ifc, int index)
+{
+	char *p, *ep, *q, *bp;
+	int i, mib[6];
+	size_t n;
+	Ipifc *list, **last;
+	Iplifc *lifc, **lastlifc;
+	struct if_msghdr *mh, *nmh;
+	struct ifa_msghdr *ah;
+	struct sockaddr *sa;
+	struct sockaddr_dl *sdl;
+	uchar ip[IPaddrlen];
+
+	USED(net);
+
+	free(ifc);
+	ifc = nil;
+	list = nil;
+	last = &list;
+
+	/*
+	 * Does not handle IPv6 yet.
+	 */
+
+	mib[0] = CTL_NET;
+	mib[1] = PF_ROUTE;
+	mib[2] = 0;
+	mib[3] = 0;
+	mib[4] = NET_RT_IFLIST;
+	mib[5] = 0;
+	
+	n = 0;
+	if(sysctl(mib, 6, nil, &n, nil, 0) < 0)
+		return nil;
+	bp = mallocz(n, 1);
+	if(bp == nil)
+		return nil;
+	if(sysctl(mib, 6, bp, &n, nil, 0) < 0){
+		free(bp);
+		return nil;
+	}
+
+	p = bp;
+	ep = p+n;
+	while(p < ep){
+		mh = (struct if_msghdr*)p;
+		p += mh->ifm_msglen;
+		if(mh->ifm_type != RTM_IFINFO)
+			continue;
+		ifc = mallocz(sizeof *ifc, 1);
+		if(ifc == nil)
+			break;
+		*last = ifc;
+		last = &ifc->next;
+		sdl = (struct sockaddr_dl*)(mh+1);
+		n = sdl->sdl_nlen;
+		if(n >= sizeof ifc->dev)
+			n = sizeof ifc->dev - 1;
+		memmove(ifc->dev, sdl->sdl_data, n);
+		ifc->dev[n] = 0;
+		ifc->rp.linkmtu = mh->ifm_data.ifi_mtu;
+		lastlifc = &ifc->lifc;
+
+		if(sdl->sdl_type == IFT_ETHER && sdl->sdl_alen == 6)
+			memmove(ifc->ether, LLADDR(sdl), 6);
+
+		while(p < ep){
+			ah = (struct ifa_msghdr*)p;
+			nmh = (struct if_msghdr*)p;
+			if(nmh->ifm_type != RTM_NEWADDR)
+				break;
+			p += nmh->ifm_msglen;
+			lifc = nil;
+			for(i=0, q=(char*)(ah+1); i<RTAX_MAX && q<p; i++){
+				if(!(ah->ifam_addrs & (1<<i)))
+					continue;
+				sa = (struct sockaddr*)q;
+				q += (sa->sa_len+sizeof(long)-1) & ~(sizeof(long)-1);
+				if(sa->sa_family != AF_INET)
+					continue;
+				if(lifc == nil){
+					lifc = mallocz(sizeof *lifc, 1);
+					if(lifc == nil)
+						continue;
+					*lastlifc = lifc;
+					lastlifc = &lifc->next;
+				}	
+				sockaddr2ip(ip, sa);
+				switch(i){
+				case RTAX_IFA:
+					ipmove(lifc->ip, ip);
+					break;
+				case RTAX_NETMASK:
+					memset(ip, 0xFF, IPv4off);
+					ipmove(lifc->mask, ip);
+					break;
+				case RTAX_BRD:
+					if(mh->ifm_flags & IFF_POINTOPOINT)
+						/* ipmove(lifc->remote, ip) */ ;
+					if(mh->ifm_flags & IFF_BROADCAST)
+						/* ipmove(lifc->bcast, ip) */ ;
+					break;
+				case RTAX_GATEWAY:
+					break;
+				case RTAX_DST:
+					break;
+				}
+			}
+			if(lifc)
+				maskip(lifc->ip, lifc->mask, lifc->net);
+		}
+	}
+	free(bp);
+	return list;
+}
blob - 2e35330df33fb0589ae2a8824977f98129ebf0f9
blob + 8710a5fd530dec2ddbe9ceb3cce3e269fb0329cf
--- src/libip/FreeBSD.c
+++ src/libip/FreeBSD.c
@@ -1,146 +1 @@
-#include <u.h>
-/* #include <everything_but_the_kitchen_sink.h> */
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <net/if.h>
-#include <sys/ioctl.h>
-#include <sys/module.h>
-#include <sys/sysctl.h>
-#include <net/ethernet.h>
-#include <net/if.h>
-#include <net/if_var.h>
-#include <net/if_dl.h>
-#include <net/if_types.h>
-#include <net/route.h>
-#include <netinet/in.h>
-#include <netinet/in_var.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-#include <libc.h>
-#include <ip.h>
-
-static void
-sockaddr2ip(uchar *ip, struct sockaddr *sa)
-{
-	struct sockaddr_in *sin;
-	
-	sin = (struct sockaddr_in*)sa;
-	memmove(ip, v4prefix, IPaddrlen);
-	memmove(ip+IPv4off, &sin->sin_addr, 4);
-}
-
-Ipifc*
-readipifc(char *net, Ipifc *ifc, int index)
-{
-	char *p, *ep, *q, *bp;
-	int i, mib[6], n;
-	Ipifc *list, **last;
-	Iplifc *lifc, **lastlifc;
-	struct if_msghdr *mh, *nmh;
-	struct ifa_msghdr *ah;
-	struct sockaddr *sa;
-	struct sockaddr_dl *sdl;
-	uchar ip[IPaddrlen];
-
-	USED(net);
-
-	free(ifc);
-	ifc = nil;
-	list = nil;
-	last = &list;
-
-	/*
-	 * Does not handle IPv6 yet.
-	 */
-
-	mib[0] = CTL_NET;
-	mib[1] = PF_ROUTE;
-	mib[2] = 0;
-	mib[3] = 0;
-	mib[4] = NET_RT_IFLIST;
-	mib[5] = 0;
-	
-	n = 0;
-	if(sysctl(mib, 6, nil, &n, nil, 0) < 0)
-		return nil;
-	bp = mallocz(n, 1);
-	if(bp == nil)
-		return nil;
-	if(sysctl(mib, 6, bp, &n, nil, 0) < 0){
-		free(bp);
-		return nil;
-	}
-
-	p = bp;
-	ep = p+n;
-	while(p < ep){
-		mh = (struct if_msghdr*)p;
-		p += mh->ifm_msglen;
-		if(mh->ifm_type != RTM_IFINFO)
-			continue;
-		ifc = mallocz(sizeof *ifc, 1);
-		if(ifc == nil)
-			break;
-		*last = ifc;
-		last = &ifc->next;
-		sdl = (struct sockaddr_dl*)(mh+1);
-		n = sdl->sdl_nlen;
-		if(n >= sizeof ifc->dev)
-			n = sizeof ifc->dev - 1;
-		memmove(ifc->dev, sdl->sdl_data, n);
-		ifc->dev[n] = 0;
-		ifc->rp.linkmtu = mh->ifm_data.ifi_mtu;
-		lastlifc = &ifc->lifc;
-
-		if(sdl->sdl_type == IFT_ETHER && sdl->sdl_alen == 6)
-			memmove(ifc->ether, LLADDR(sdl), 6);
-
-		while(p < ep){
-			ah = (struct ifa_msghdr*)p;
-			nmh = (struct if_msghdr*)p;
-			if(nmh->ifm_type != RTM_NEWADDR)
-				break;
-			p += nmh->ifm_msglen;
-			lifc = nil;
-			for(i=0, q=(char*)(ah+1); i<RTAX_MAX && q<p; i++){
-				if(!(ah->ifam_addrs & (1<<i)))
-					continue;
-				sa = (struct sockaddr*)q;
-				q += (sa->sa_len+sizeof(long)-1) & ~(sizeof(long)-1);
-				if(sa->sa_family != AF_INET)
-					continue;
-				if(lifc == nil){
-					lifc = mallocz(sizeof *lifc, 1);
-					if(lifc == nil)
-						continue;
-					*lastlifc = lifc;
-					lastlifc = &lifc->next;
-				}	
-				sockaddr2ip(ip, sa);
-				switch(i){
-				case RTAX_IFA:
-					ipmove(lifc->ip, ip);
-					break;
-				case RTAX_NETMASK:
-					memset(ip, 0xFF, IPv4off);
-					ipmove(lifc->mask, ip);
-					break;
-				case RTAX_BRD:
-					if(mh->ifm_flags & IFF_POINTOPOINT)
-						/* ipmove(lifc->remote, ip) */ ;
-					if(mh->ifm_flags & IFF_BROADCAST)
-						/* ipmove(lifc->bcast, ip) */ ;
-					break;
-				case RTAX_GATEWAY:
-					break;
-				case RTAX_DST:
-					break;
-				}
-			}
-			if(lifc)
-				maskip(lifc->ip, lifc->mask, lifc->net);
-		}
-	}
-	free(bp);
-	return list;
-}
+#include "BSD.c"
blob - fca028ee50f4f836b9d6708be553e1d87a3306a9
blob + bb715451d8364ca1894342ce49f23a2073a48d60
--- src/libip/eipfmt.c
+++ src/libip/eipfmt.c
@@ -59,7 +59,7 @@ eipfmt(Fmt *f)
 		fmt = efmt;
 		if(f->flags&FmtSharp)
 			fmt = altefmt;
-		snprint(buf, sizeof buf, efmt, p[0], p[1], p[2], p[3], p[4], p[5]);
+		snprint(buf, sizeof buf, fmt, p[0], p[1], p[2], p[3], p[4], p[5]);
 		return fmtstrcpy(f, buf);
 
 	case 'I':		/* Ip address */
blob - 6f8ad2f8757a4ff7782b770997c86ab0948b2748
blob + 9546034d9fdcec2b3ba0bee1f1f394e216ba15da
--- src/libip/mkfile
+++ src/libip/mkfile
@@ -19,6 +19,8 @@ HFILES=\
 
 <$PLAN9/src/mksyslib
 
+Darwin.$O FreeBSD.$O: BSD.c
+
 testreadipifc: testreadipifc.o $LIBDIR/$LIB
 	$LD -o testreadipifc testreadipifc.o