version 1.21, 1995/06/12 06:48:56 |
version 1.25, 1995/11/21 01:07:46 |
Line 142 udp_input(m, iphlen) |
|
Line 142 udp_input(m, iphlen) |
|
* Checksum extended UDP header and data. |
* Checksum extended UDP header and data. |
*/ |
*/ |
if (udpcksum && uh->uh_sum) { |
if (udpcksum && uh->uh_sum) { |
((struct ipovly *)ip)->ih_next = 0; |
bzero(((struct ipovly *)ip)->ih_x1, |
((struct ipovly *)ip)->ih_prev = 0; |
sizeof ((struct ipovly *)ip)->ih_x1); |
((struct ipovly *)ip)->ih_x1 = 0; |
|
((struct ipovly *)ip)->ih_len = uh->uh_ulen; |
((struct ipovly *)ip)->ih_len = uh->uh_ulen; |
if (uh->uh_sum = in_cksum(m, len + sizeof (struct ip))) { |
if (uh->uh_sum = in_cksum(m, len + sizeof (struct ip))) { |
udpstat.udps_badsum++; |
udpstat.udps_badsum++; |
Line 184 udp_input(m, iphlen) |
|
Line 183 udp_input(m, iphlen) |
|
* (Algorithm copied from raw_intr().) |
* (Algorithm copied from raw_intr().) |
*/ |
*/ |
last = NULL; |
last = NULL; |
for (inp = udbtable.inpt_list.lh_first; inp != 0; |
for (inp = udbtable.inpt_queue.cqh_first; |
inp = inp->inp_list.le_next) { |
inp != (struct inpcb *)&udbtable.inpt_queue; |
|
inp = inp->inp_queue.cqe_next) { |
if (inp->inp_lport != uh->uh_dport) |
if (inp->inp_lport != uh->uh_dport) |
continue; |
continue; |
if (inp->inp_laddr.s_addr != INADDR_ANY) { |
if (inp->inp_laddr.s_addr != INADDR_ANY) { |
Line 376 udp_ctlinput(cmd, sa, ip) |
|
Line 376 udp_ctlinput(cmd, sa, ip) |
|
notify = in_rtchange, ip = 0; |
notify = in_rtchange, ip = 0; |
else if (cmd == PRC_HOSTDEAD) |
else if (cmd == PRC_HOSTDEAD) |
ip = 0; |
ip = 0; |
else if (errno = 0) |
else if (errno == 0) |
return; |
return; |
if (ip) { |
if (ip) { |
uh = (struct udphdr *)((caddr_t)ip + (ip->ip_hl << 2)); |
uh = (struct udphdr *)((caddr_t)ip + (ip->ip_hl << 2)); |
Line 409 udp_output(inp, m, addr, control) |
|
Line 409 udp_output(inp, m, addr, control) |
|
/* |
/* |
* Must block input while temporarily connected. |
* Must block input while temporarily connected. |
*/ |
*/ |
s = splnet(); |
s = splsoftnet(); |
error = in_pcbconnect(inp, addr); |
error = in_pcbconnect(inp, addr); |
if (error) { |
if (error) { |
splx(s); |
splx(s); |
Line 436 udp_output(inp, m, addr, control) |
|
Line 436 udp_output(inp, m, addr, control) |
|
* and addresses and length put into network format. |
* and addresses and length put into network format. |
*/ |
*/ |
ui = mtod(m, struct udpiphdr *); |
ui = mtod(m, struct udpiphdr *); |
ui->ui_next = ui->ui_prev = 0; |
bzero(ui->ui_x1, sizeof ui->ui_x1); |
ui->ui_x1 = 0; |
|
ui->ui_pr = IPPROTO_UDP; |
ui->ui_pr = IPPROTO_UDP; |
ui->ui_len = htons((u_int16_t)len + sizeof (struct udphdr)); |
ui->ui_len = htons((u_int16_t)len + sizeof (struct udphdr)); |
ui->ui_src = inp->inp_laddr; |
ui->ui_src = inp->inp_laddr; |
Line 507 udp_usrreq(so, req, m, addr, control) |
|
Line 506 udp_usrreq(so, req, m, addr, control) |
|
error = EINVAL; |
error = EINVAL; |
break; |
break; |
} |
} |
s = splnet(); |
s = splsoftnet(); |
error = in_pcballoc(so, &udbtable); |
error = in_pcballoc(so, &udbtable); |
splx(s); |
splx(s); |
if (error) |
if (error) |
Line 523 udp_usrreq(so, req, m, addr, control) |
|
Line 522 udp_usrreq(so, req, m, addr, control) |
|
break; |
break; |
|
|
case PRU_BIND: |
case PRU_BIND: |
s = splnet(); |
s = splsoftnet(); |
error = in_pcbbind(inp, addr); |
error = in_pcbbind(inp, addr); |
splx(s); |
splx(s); |
break; |
break; |
Line 537 udp_usrreq(so, req, m, addr, control) |
|
Line 536 udp_usrreq(so, req, m, addr, control) |
|
error = EISCONN; |
error = EISCONN; |
break; |
break; |
} |
} |
s = splnet(); |
s = splsoftnet(); |
error = in_pcbconnect(inp, addr); |
error = in_pcbconnect(inp, addr); |
splx(s); |
splx(s); |
if (error == 0) |
if (error == 0) |
Line 557 udp_usrreq(so, req, m, addr, control) |
|
Line 556 udp_usrreq(so, req, m, addr, control) |
|
error = ENOTCONN; |
error = ENOTCONN; |
break; |
break; |
} |
} |
s = splnet(); |
s = splsoftnet(); |
in_pcbdisconnect(inp); |
in_pcbdisconnect(inp); |
inp->inp_laddr.s_addr = INADDR_ANY; |
inp->inp_laddr.s_addr = INADDR_ANY; |
splx(s); |
splx(s); |
|
|
udp_detach(inp) |
udp_detach(inp) |
struct inpcb *inp; |
struct inpcb *inp; |
{ |
{ |
int s = splnet(); |
int s = splsoftnet(); |
|
|
if (inp == udp_last_inpcb) |
if (inp == udp_last_inpcb) |
udp_last_inpcb = 0; |
udp_last_inpcb = 0; |