xref: /original-bsd/sys/net/if.c (revision a304ca22)
1 /*	if.c	4.10	82/03/15	*/
2 
3 #include "../h/param.h"
4 #include "../h/systm.h"
5 #include "../net/in.h"
6 #include "../net/in_systm.h"
7 #include "../net/if.h"
8 
9 int	ifqmaxlen = IFQ_MAXLEN;
10 
11 ifinit()
12 {
13 	register struct ifnet *ifp;
14 
15 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
16 		if (ifp->if_init) {
17 			(*ifp->if_init)();
18 			if (ifp->if_snd.ifq_maxlen == 0)
19 				ifp->if_snd.ifq_maxlen = ifqmaxlen;
20 		}
21 }
22 
23 ifubareset(uban)
24 	int uban;
25 {
26 	register struct ifnet *ifp;
27 
28 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
29 		if (ifp->if_ubareset)
30 			(*ifp->if_ubareset)(uban);
31 }
32 
33 if_attach(ifp)
34 	struct ifnet *ifp;
35 {
36 	register struct ifnet **p = &ifnet;
37 
38 COUNT(IF_ATTACH);
39 	while (*p)
40 		p = &((*p)->if_next);
41 	*p = ifp;
42 }
43 
44 /*ARGSUSED*/
45 struct ifnet *
46 if_ifwithaddr(in)
47 	struct in_addr in;
48 {
49 	register struct ifnet *ifp;
50 
51 COUNT(IF_IFWITHADDR);
52 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
53 		if (in.s_addr == ifp->if_addr.s_addr ||
54 		    (ifp->if_broadaddr.s_addr != 0 &&
55 		     in.s_addr == ifp->if_broadaddr.s_addr))
56 			break;
57 	return (ifp);
58 }
59 
60 /*ARGSUSED*/
61 struct ifnet *
62 if_ifonnetof(in)
63 	struct in_addr in;
64 {
65 	register struct ifnet *ifp;
66 	int net;
67 
68 COUNT(IF_IFONNETOF);
69 	net = in.s_net;			/* XXX */
70 	for (ifp = ifnet; ifp; ifp = ifp->if_next)
71 		if (ifp->if_net == net)
72 			break;
73 	return (ifp);
74 }
75 
76 /*ARGSUSED*/
77 struct ifnet *
78 if_gatewayfor(addr)
79 	struct in_addr addr;
80 {
81 
82 COUNT(IF_GATEWAYFOR);
83 	return (0);
84 }
85 
86 struct in_addr
87 if_makeaddr(net, host)
88 	int net, host;
89 {
90 	u_long addr;
91 
92 	if (net < 128)
93 		addr = (net << 24) | host;
94 	else if (net < 65536)
95 		addr = (net << 16) | host;
96 	else
97 		addr = (net << 8) | host;
98 #ifdef vax
99 	addr = htonl(addr);
100 #endif
101 	return (*(struct in_addr *)&addr);
102 }
103