/* in_pcb.c 4.3 81/11/18 */
#include "../h/socketvar.h"
#include "../net/inet_systm.h"
#include "../net/inet_host.h"
#include "../net/inet_pcb.h"
return (mtod(m
, struct inpcb
*));
struct inpcb
*head
, *new;
register struct inpcb
*inp
;
for (inp
= head
->inp_next
; inp
!= head
; inp
= inp
->inp_next
)
if (inp
->inp_fhost
->h_addr
.s_addr
== new->inp_fhost
.s_addr
&&
inp
->inp_fport
== new->inp_fport
&&
inp
->inp_lhost
->h_addr
.s_addr
= new->inp_fhost
.s_addr
&&
inp
->inp_lport
== new->inp_lport
)
struct socket
*so
= inp
->inp_socket
;
if (so
->so_isfilerefd
== 0)
in_hostfree(inp
->inp_lhost
);
in_hostfree(inp
->inp_fhost
);
(void) m_free(dtom(inp
));
in_pcblookup(head
, fhost
, fport
, lhost
, lport
)
struct in_addr
*fhost
, *lhost
;
register struct inpcb
*inp
;
for (inp
= head
->inp_next
; inp
!= head
; inp
= inp
->inp_next
)
if (inp
->inp_fhost
->h_addr
.s_addr
== fhost
->s_addr
&&
inp
->inp_fport
== fport
&&
inp
->inp_lhost
->h_addr
.s_addr
== lhost
->s_addr
&&
for (inp
= head
->inp_next
; inp
!= head
; inp
= inp
->inp_next
)
if ((inp
->inp_fhost
->h_addr
.s_addr
== fhost
->s_addr
||
(inp
->inp_fport
== fport
|| inp
->inp_fport
== 0) &&
inp
->inp_lhost
->h_addr
.s_addr
== lhost
->s_addr
&&
(inp
->inp_lport
== lport
|| inp
->inp_lport
== 0))
register struct inpcb
*inp
;
if (head
->inp_lport
++ < 1024)
for (inp
= head
->inp_next
; inp
!= head
; inp
= inp
->inp_next
)
if (inp
->inp_lport
== head
->inp_lport
)
return (head
->inp_lport
);