static int rip6_pr_output()

in bsd/netinet6/in6_proto.c [157:331]


static int rip6_pr_output(struct mbuf *, struct socket *,
    struct sockaddr_in6 *, struct mbuf *);

struct ip6protosw inet6sw[] = {
	{
		.pr_type =              0,
		.pr_protocol =          IPPROTO_IPV6,
		.pr_init =              ip6_init,
		.pr_drain =             ip6_drain,
		.pr_usrreqs =           &nousrreqs,
	},
	{
		.pr_type =              SOCK_DGRAM,
		.pr_protocol =          IPPROTO_UDP,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_PROTOLOCK | PR_PCBLOCK |
    PR_EVCONNINFO | PR_PRECONN_WRITE,
		.pr_input =             udp6_input,
		.pr_ctlinput =          udp6_ctlinput,
		.pr_ctloutput =         ip6_ctloutput,
#if !INET       /* don't call initialization twice */
		.pr_init =              udp_init,
#endif /* !INET */
		.pr_usrreqs =           &udp6_usrreqs,
		.pr_lock =              udp_lock,
		.pr_unlock =            udp_unlock,
		.pr_getlock =           udp_getlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
	{
		.pr_type =              SOCK_STREAM,
		.pr_protocol =          IPPROTO_TCP,
		.pr_flags =             PR_CONNREQUIRED | PR_WANTRCVD | PR_PCBLOCK |
    PR_PROTOLOCK | PR_DISPOSE | PR_EVCONNINFO |
    PR_PRECONN_WRITE | PR_DATA_IDEMPOTENT,
		.pr_input =             tcp6_input,
		.pr_ctlinput =          tcp6_ctlinput,
		.pr_ctloutput =         tcp_ctloutput,
#if !INET       /* don't call initialization and timeout routines twice */
		.pr_init =              tcp_init,
#endif /* !INET */
		.pr_drain =             tcp_drain,
		.pr_usrreqs =           &tcp6_usrreqs,
		.pr_lock =              tcp_lock,
		.pr_unlock =            tcp_unlock,
		.pr_getlock =           tcp_getlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_RAW,
		.pr_flags =             PR_ATOMIC | PR_ADDR,
		.pr_input =             rip6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctlinput =          rip6_ctlinput,
		.pr_ctloutput =         rip6_ctloutput,
#if !INET       /* don't call initialization and timeout routines twice */
		.pr_init =              rip_init,
#endif /* !INET */
		.pr_usrreqs =           &rip6_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_ICMPV6,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_LASTHDR,
		.pr_input =             icmp6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctlinput =          rip6_ctlinput,
		.pr_ctloutput =         rip6_ctloutput,
		.pr_init =              icmp6_init,
		.pr_usrreqs =           &rip6_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
	{
		.pr_type =              SOCK_DGRAM,
		.pr_protocol =          IPPROTO_ICMPV6,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_LASTHDR,
		.pr_input =             icmp6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctlinput =          rip6_ctlinput,
		.pr_ctloutput =         icmp6_dgram_ctloutput,
		.pr_init =              icmp6_init,
		.pr_usrreqs =           &icmp6_dgram_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_DSTOPTS,
		.pr_flags =             PR_ATOMIC | PR_ADDR,
		.pr_input =             dest6_input,
		.pr_usrreqs =           &nousrreqs,
	},
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_ROUTING,
		.pr_flags =             PR_ATOMIC | PR_ADDR,
		.pr_input =             route6_input,
		.pr_usrreqs =           &nousrreqs,
	},
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_FRAGMENT,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_PROTOLOCK,
		.pr_input =             frag6_input,
		.pr_usrreqs =           &nousrreqs,
	},
#if IPSEC
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_AH,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_PROTOLOCK,
		.pr_input =             ah6_input,
		.pr_usrreqs =           &nousrreqs,
	},
#if IPSEC_ESP
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_ESP,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_PROTOLOCK,
		.pr_input =             esp6_input,
		.pr_ctlinput =          esp6_ctlinput,
		.pr_usrreqs =           &nousrreqs,
	},
#endif /* IPSEC_ESP */
#endif /* IPSEC */
#if INET
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_IPV4,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_LASTHDR,
		.pr_input =             encap6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctloutput =         rip6_ctloutput,
		.pr_init =              encap6_init,
		.pr_usrreqs =           &rip6_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
#endif /*INET*/
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          IPPROTO_IPV6,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_LASTHDR,
		.pr_input =             encap6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctloutput =         rip6_ctloutput,
		.pr_init =              encap6_init,
		.pr_usrreqs =           &rip6_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
/* raw wildcard */
	{
		.pr_type =              SOCK_RAW,
		.pr_protocol =          0,
		.pr_flags =             PR_ATOMIC | PR_ADDR | PR_LASTHDR,
		.pr_input =             rip6_input,
		.pr_output =            rip6_pr_output,
		.pr_ctloutput =         rip6_ctloutput,
		.pr_usrreqs =           &rip6_usrreqs,
		.pr_unlock =            rip_unlock,
		.pr_update_last_owner = inp_update_last_owner,
		.pr_copy_last_owner =   inp_copy_last_owner,
	},
};