| version 1.19, 1995/06/04 05:07:11 |
version 1.20, 1995/06/12 00:47:49 |
|
|
| #include <netinet/ip_mroute.h> |
#include <netinet/ip_mroute.h> |
| #include <netinet/in_pcb.h> |
#include <netinet/in_pcb.h> |
| |
|
| struct inpcb rawinpcb; |
struct inpcbtable rawcbtable; |
| |
|
| /* |
/* |
| * Nominal space allocated to a raw ip socket. |
* Nominal space allocated to a raw ip socket. |
|
|
| rip_init() |
rip_init() |
| { |
{ |
| |
|
| rawinpcb.inp_next = rawinpcb.inp_prev = &rawinpcb; |
in_pcbinit(&rawcbtable); |
| } |
} |
| |
|
| struct sockaddr_in ripsrc = { sizeof(ripsrc), AF_INET }; |
struct sockaddr_in ripsrc = { sizeof(ripsrc), AF_INET }; |
|
|
| struct socket *last = 0; |
struct socket *last = 0; |
| |
|
| ripsrc.sin_addr = ip->ip_src; |
ripsrc.sin_addr = ip->ip_src; |
| for (inp = rawinpcb.inp_next; inp != &rawinpcb; inp = inp->inp_next) { |
for (inp = rawcbtable.inpt_list.lh_first; inp != 0; |
| |
inp = inp->inp_list.le_next) { |
| if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p) |
if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != ip->ip_p) |
| continue; |
continue; |
| if (inp->inp_laddr.s_addr && |
if (inp->inp_laddr.s_addr && |
| Line 263 rip_usrreq(so, req, m, nam, control) |
|
| Line 264 rip_usrreq(so, req, m, nam, control) |
|
| break; |
break; |
| } |
} |
| if ((error = soreserve(so, rip_sendspace, rip_recvspace)) || |
if ((error = soreserve(so, rip_sendspace, rip_recvspace)) || |
| (error = in_pcballoc(so, &rawinpcb))) |
(error = in_pcballoc(so, &rawcbtable))) |
| break; |
break; |
| inp = (struct inpcb *)so->so_pcb; |
inp = (struct inpcb *)so->so_pcb; |
| inp->inp_ip.ip_p = (long)nam; |
inp->inp_ip.ip_p = (long)nam; |
| Line 296 rip_usrreq(so, req, m, nam, control) |
|
| Line 297 rip_usrreq(so, req, m, nam, control) |
|
| error = EINVAL; |
error = EINVAL; |
| break; |
break; |
| } |
} |
| if ((ifnet == 0) || |
if ((ifnet.tqh_first == 0) || |
| ((addr->sin_family != AF_INET) && |
((addr->sin_family != AF_INET) && |
| (addr->sin_family != AF_IMPLINK)) || |
(addr->sin_family != AF_IMPLINK)) || |
| (addr->sin_addr.s_addr && |
(addr->sin_addr.s_addr && |
| Line 315 rip_usrreq(so, req, m, nam, control) |
|
| Line 316 rip_usrreq(so, req, m, nam, control) |
|
| error = EINVAL; |
error = EINVAL; |
| break; |
break; |
| } |
} |
| if (ifnet == 0) { |
if (ifnet.tqh_first == 0) { |
| error = EADDRNOTAVAIL; |
error = EADDRNOTAVAIL; |
| break; |
break; |
| } |
} |