xref: /csrg-svn/sys/net/if.c (revision 6207)
1*6207Swnj /*	if.c	4.10	82/03/15	*/
24944Swnj 
34944Swnj #include "../h/param.h"
44944Swnj #include "../h/systm.h"
55083Swnj #include "../net/in.h"
65083Swnj #include "../net/in_systm.h"
74944Swnj #include "../net/if.h"
84944Swnj 
9*6207Swnj int	ifqmaxlen = IFQ_MAXLEN;
10*6207Swnj 
115206Swnj ifinit()
125206Swnj {
135206Swnj 	register struct ifnet *ifp;
145206Swnj 
155206Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
16*6207Swnj 		if (ifp->if_init) {
175206Swnj 			(*ifp->if_init)();
18*6207Swnj 			if (ifp->if_snd.ifq_maxlen == 0)
19*6207Swnj 				ifp->if_snd.ifq_maxlen = ifqmaxlen;
20*6207Swnj 		}
215206Swnj }
225206Swnj 
235206Swnj ifubareset(uban)
245206Swnj 	int uban;
255206Swnj {
265206Swnj 	register struct ifnet *ifp;
275206Swnj 
285206Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
295206Swnj 		if (ifp->if_ubareset)
305206Swnj 			(*ifp->if_ubareset)(uban);
315206Swnj }
325206Swnj 
335160Swnj if_attach(ifp)
345160Swnj 	struct ifnet *ifp;
355160Swnj {
365698Swnj 	register struct ifnet **p = &ifnet;
375160Swnj 
385160Swnj COUNT(IF_ATTACH);
395698Swnj 	while (*p)
405698Swnj 		p = &((*p)->if_next);
415698Swnj 	*p = ifp;
425160Swnj }
435160Swnj 
444951Swnj /*ARGSUSED*/
454951Swnj struct ifnet *
464944Swnj if_ifwithaddr(in)
474944Swnj 	struct in_addr in;
484944Swnj {
494944Swnj 	register struct ifnet *ifp;
504944Swnj 
514951Swnj COUNT(IF_IFWITHADDR);
524944Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
536087Sroot 		if (in.s_addr == ifp->if_addr.s_addr ||
546087Sroot 		    (ifp->if_broadaddr.s_addr != 0 &&
556087Sroot 		     in.s_addr == ifp->if_broadaddr.s_addr))
564944Swnj 			break;
574944Swnj 	return (ifp);
584944Swnj }
594944Swnj 
604951Swnj /*ARGSUSED*/
614951Swnj struct ifnet *
624944Swnj if_ifonnetof(in)
634944Swnj 	struct in_addr in;
644944Swnj {
654944Swnj 	register struct ifnet *ifp;
664944Swnj 	int net;
674944Swnj 
684951Swnj COUNT(IF_IFONNETOF);
695083Swnj 	net = in.s_net;			/* XXX */
704944Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
714944Swnj 		if (ifp->if_net == net)
724944Swnj 			break;
734944Swnj 	return (ifp);
744944Swnj }
754944Swnj 
765104Swnj /*ARGSUSED*/
775083Swnj struct ifnet *
785083Swnj if_gatewayfor(addr)
795083Swnj 	struct in_addr addr;
805083Swnj {
815083Swnj 
825083Swnj COUNT(IF_GATEWAYFOR);
835083Swnj 	return (0);
845083Swnj }
855104Swnj 
865104Swnj struct in_addr
875104Swnj if_makeaddr(net, host)
885104Swnj 	int net, host;
895104Swnj {
905104Swnj 	u_long addr;
915104Swnj 
925104Swnj 	if (net < 128)
935206Swnj 		addr = (net << 24) | host;
945104Swnj 	else if (net < 65536)
955206Swnj 		addr = (net << 16) | host;
965104Swnj 	else
975206Swnj 		addr = (net << 8) | host;
985685Ssam #ifdef vax
995104Swnj 	addr = htonl(addr);
1005685Ssam #endif
1015104Swnj 	return (*(struct in_addr *)&addr);
1025104Swnj }
103