xref: /csrg-svn/sys/net/if.c (revision 6087)
1*6087Sroot /*	if.c	4.9	82/03/09	*/
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 
95206Swnj ifinit()
105206Swnj {
115206Swnj 	register struct ifnet *ifp;
125206Swnj 
135206Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
145206Swnj 		if (ifp->if_init)
155206Swnj 			(*ifp->if_init)();
165206Swnj }
175206Swnj 
185206Swnj ifubareset(uban)
195206Swnj 	int uban;
205206Swnj {
215206Swnj 	register struct ifnet *ifp;
225206Swnj 
235206Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
245206Swnj 		if (ifp->if_ubareset)
255206Swnj 			(*ifp->if_ubareset)(uban);
265206Swnj }
275206Swnj 
285160Swnj if_attach(ifp)
295160Swnj 	struct ifnet *ifp;
305160Swnj {
315698Swnj 	register struct ifnet **p = &ifnet;
325160Swnj 
335160Swnj COUNT(IF_ATTACH);
345698Swnj 	while (*p)
355698Swnj 		p = &((*p)->if_next);
365698Swnj 	*p = ifp;
375160Swnj }
385160Swnj 
394951Swnj /*ARGSUSED*/
404951Swnj struct ifnet *
414944Swnj if_ifwithaddr(in)
424944Swnj 	struct in_addr in;
434944Swnj {
444944Swnj 	register struct ifnet *ifp;
454944Swnj 
464951Swnj COUNT(IF_IFWITHADDR);
474944Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
48*6087Sroot 		if (in.s_addr == ifp->if_addr.s_addr ||
49*6087Sroot 		    (ifp->if_broadaddr.s_addr != 0 &&
50*6087Sroot 		     in.s_addr == ifp->if_broadaddr.s_addr))
514944Swnj 			break;
524944Swnj 	return (ifp);
534944Swnj }
544944Swnj 
554951Swnj /*ARGSUSED*/
564951Swnj struct ifnet *
574944Swnj if_ifonnetof(in)
584944Swnj 	struct in_addr in;
594944Swnj {
604944Swnj 	register struct ifnet *ifp;
614944Swnj 	int net;
624944Swnj 
634951Swnj COUNT(IF_IFONNETOF);
645083Swnj 	net = in.s_net;			/* XXX */
654944Swnj 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
664944Swnj 		if (ifp->if_net == net)
674944Swnj 			break;
684944Swnj 	return (ifp);
694944Swnj }
704944Swnj 
715104Swnj /*ARGSUSED*/
725083Swnj struct ifnet *
735083Swnj if_gatewayfor(addr)
745083Swnj 	struct in_addr addr;
755083Swnj {
765083Swnj 
775083Swnj COUNT(IF_GATEWAYFOR);
785083Swnj 	return (0);
795083Swnj }
805104Swnj 
815104Swnj struct in_addr
825104Swnj if_makeaddr(net, host)
835104Swnj 	int net, host;
845104Swnj {
855104Swnj 	u_long addr;
865104Swnj 
875104Swnj 	if (net < 128)
885206Swnj 		addr = (net << 24) | host;
895104Swnj 	else if (net < 65536)
905206Swnj 		addr = (net << 16) | host;
915104Swnj 	else
925206Swnj 		addr = (net << 8) | host;
935685Ssam #ifdef vax
945104Swnj 	addr = htonl(addr);
955685Ssam #endif
965104Swnj 	return (*(struct in_addr *)&addr);
975104Swnj }
98