Initialize protocol switch with structure initializers. Move ipflow_slowtimo into the protocol switch Index: in_proto.c =================================================================== RCS file: /cvsroot/src/sys/netinet/in_proto.c,v retrieving revision 1.80 diff -u -r1.80 in_proto.c --- in_proto.c 9 Dec 2006 05:33:04 -0000 1.80 +++ in_proto.c 2 Mar 2007 22:00:39 -0000 @@ -157,146 +157,249 @@ DOMAIN_DEFINE(inetdomain); /* forward declare and add to link set */ const struct protosw inetsw[] = { -{ 0, &inetdomain, 0, 0, - 0, ip_output, 0, 0, - 0, - ip_init, 0, ip_slowtimo, ip_drain, -}, -{ SOCK_DGRAM, &inetdomain, IPPROTO_UDP, PR_ATOMIC|PR_ADDR|PR_PURGEIF, - udp_input, 0, udp_ctlinput, udp_ctloutput, - udp_usrreq, - udp_init, 0, 0, 0, -}, -{ SOCK_STREAM, &inetdomain, IPPROTO_TCP, PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_ABRTACPTDIS|PR_PURGEIF, - tcp_input, 0, tcp_ctlinput, tcp_ctloutput, - tcp_usrreq, - tcp_init, 0, tcp_slowtimo, tcp_drain, -}, -{ SOCK_RAW, &inetdomain, IPPROTO_RAW, PR_ATOMIC|PR_ADDR|PR_PURGEIF, - rip_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - 0, 0, 0, 0, -}, -{ SOCK_RAW, &inetdomain, IPPROTO_ICMP, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - icmp_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - icmp_init, 0, 0, 0, +{ .pr_domain = &inetdomain, + .pr_init = ip_init, + .pr_output = ip_output, + .pr_slowtimo = ip_slowtimo, + .pr_drain = ip_drain, +}, +{ .pr_type = SOCK_DGRAM, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_UDP, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_PURGEIF, + .pr_input = udp_input, + .pr_ctlinput = udp_ctlinput, + .pr_ctloutput = udp_ctloutput, + .pr_usrreq = udp_usrreq, + .pr_init = udp_init, +}, +{ .pr_type = SOCK_STREAM, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_TCP, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_ABRTACPTDIS|PR_PURGEIF, + .pr_input = tcp_input, + .pr_ctlinput = tcp_ctlinput, + .pr_ctloutput = tcp_ctloutput, + .pr_usrreq = tcp_usrreq, + .pr_init = tcp_init, + .pr_slowtimo = tcp_slowtimo, + .pr_drain = tcp_drain, +}, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_RAW, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_PURGEIF, + .pr_input = rip_input, + .pr_output = rip_output, + .pr_ctlinput = rip_ctlinput, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, +}, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_ICMP, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = icmp_input, + .pr_output = rip_output, + .pr_ctlinput = rip_ctlinput, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, + .pr_init = icmp_init, +}, +#ifdef GATEWAY +{ .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_IP, + .pr_slowtimo = ipflow_slowtimo, }, +#endif /* GATEWAY */ #ifdef IPSEC -{ SOCK_RAW, &inetdomain, IPPROTO_AH, PR_ATOMIC|PR_ADDR, - ah4_input, 0, ah4_ctlinput, 0, - 0, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_AH, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = ah4_input, + .pr_ctlinput = ah4_ctlinput, }, #ifdef IPSEC_ESP -{ SOCK_RAW, &inetdomain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR, - esp4_input, - 0, esp4_ctlinput, 0, - 0, - 0, 0, 0, 0, -}, -#endif -{ SOCK_RAW, &inetdomain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR, - ipcomp4_input, - 0, 0, 0, - 0, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_ESP, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = esp4_input, + .pr_ctlinput = esp4_ctlinput, +}, +#endif /* IPSEC_ESP */ +{ .pr_type = SOCK_RAW, + .pr_domain = &inet6domain, + .pr_protocol = IPPROTO_IPCOMP, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = ipcomp4_input, }, #endif /* IPSEC */ #ifdef FAST_IPSEC -{ SOCK_RAW, &inetdomain, IPPROTO_AH, PR_ATOMIC|PR_ADDR, - ipsec4_common_input, 0, ah4_ctlinput, 0, - 0, 0, 0, 0, 0, -}, -{ SOCK_RAW, &inetdomain, IPPROTO_ESP, PR_ATOMIC|PR_ADDR, - ipsec4_common_input, 0, esp4_ctlinput, 0, - 0, - 0, 0, 0, 0, -}, -{ SOCK_RAW, &inetdomain, IPPROTO_IPCOMP, PR_ATOMIC|PR_ADDR, - ipsec4_common_input, 0, 0, 0, - 0, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_AH, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = ipsec4_common_input, + .pr_ctlinput = ah4_ctlinput, +}, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_ESP, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = ipsec4_common_input, + .pr_ctlinput = esp4_ctlinput, +}, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_IPCOMP, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = ipsec4_common_input, }, #endif /* FAST_IPSEC */ -{ SOCK_RAW, &inetdomain, IPPROTO_IPV4, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - encap4_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, /*XXX*/ - encap_init, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_IPV4, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = encap4_input, + .pr_output = rip_output, + .pr_ctlinput = rip_ctlinput, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, + .pr_init = encap_init, }, #ifdef INET6 -{ SOCK_RAW, &inetdomain, IPPROTO_IPV6, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - encap4_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, /*XXX*/ - encap_init, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_IPV6, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = encap4_input, + .pr_output = rip_output, + .pr_ctlinput = rip_ctlinput, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, + .pr_init = encap_init, }, #endif /* INET6 */ #if NETHERIP > 0 -{ SOCK_RAW, &inetdomain, IPPROTO_ETHERIP, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - ip_etherip_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_ETHERIP, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = ip_etherip_input, + .pr_output = rip_output, + .pr_ctlinput = rip_ctlinput, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, }, -#endif +#endif /* NETHERIP > 0 */ #if NCARP > 0 -{ SOCK_RAW, &inetdomain, IPPROTO_CARP, PR_ATOMIC|PR_ADDR, - carp_proto_input, rip_output, 0, rip_ctloutput, - rip_usrreq, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_CARP, + .pr_flags = PR_ATOMIC|PR_ADDR, + .pr_input = carp_proto_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_usrreq = rip_usrreq, }, -#endif +#endif /* NCARP > 0 */ #if NGRE > 0 -{ SOCK_RAW, &inetdomain, IPPROTO_GRE, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - gre_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - 0, 0, 0, 0, -}, -{ SOCK_RAW, &inetdomain, IPPROTO_MOBILE, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - gre_mobile_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - 0, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_GRE, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = gre_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, +}, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_MOBILE, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = gre_mobile_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, }, #endif /* NGRE > 0 */ -{ SOCK_RAW, &inetdomain, IPPROTO_IGMP, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - igmp_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - NULL, igmp_fasttimo, igmp_slowtimo, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_IGMP, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = igmp_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, + .pr_fasttimo = igmp_fasttimo, + .pr_slowtimo = igmp_slowtimo, }, #ifdef PIM -{ SOCK_RAW, &inetdomain, IPPROTO_PIM, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - pim_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - NULL, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_PIM, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = pim_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, }, #endif /* PIM */ #ifdef TPIP -{ SOCK_SEQPACKET,&inetdomain, IPPROTO_TP, PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_LASTHDR|PR_ABRTACPTDIS, - tpip_input, 0, tpip_ctlinput, tp_ctloutput, - tp_usrreq, - tp_init, 0, tp_slowtimo, tp_drain, +{ .pr_type = SOCK_SEQPACKET, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_TP, + .pr_flags = PR_CONNREQUIRED|PR_WANTRCVD|PR_LISTEN|PR_LASTHDR|PR_ABRTACPTDIS, + .pr_input = tpip_input, + .pr_ctloutput = tp_ctloutput, + .pr_ctlinput = tpip_ctlinput, + .pr_usrreq = tp_usrreq, + .pr_init = tp_init, + .pr_slowtimo = tp_slowtimo, + .pr_drain = tp_drain, }, #endif /* TPIP */ #ifdef ISO /* EON (ISO CLNL over IP) */ #ifdef EON -{ SOCK_RAW, &inetdomain, IPPROTO_EON, PR_LASTHDR, - eoninput, 0, eonctlinput, 0, - 0, - eonprotoinit, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_EON, + .pr_flags = PR_LASTHDR, + .pr_input = eoninput, + .pr_ctlinput = eonctlinput, + .pr_init = eonprotoinit, }, #else -{ SOCK_RAW, &inetdomain, IPPROTO_EON, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - encap4_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, /*XXX*/ - encap_init, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_protocol = IPPROTO_EON, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = encap4_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, + .pr_init = encap_init, }, #endif /* EON */ #endif /* ISO */ /* raw wildcard */ -{ SOCK_RAW, &inetdomain, 0, PR_ATOMIC|PR_ADDR|PR_LASTHDR, - rip_input, rip_output, rip_ctlinput, rip_ctloutput, - rip_usrreq, - rip_init, 0, 0, 0, +{ .pr_type = SOCK_RAW, + .pr_domain = &inetdomain, + .pr_flags = PR_ATOMIC|PR_ADDR|PR_LASTHDR, + .pr_input = rip_input, + .pr_output = rip_output, + .pr_ctloutput = rip_ctloutput, + .pr_ctlinput = rip_ctlinput, + .pr_usrreq = rip_usrreq, + .pr_init = rip_init, }, }; Index: ip_input.c =================================================================== RCS file: /cvsroot/src/sys/netinet/ip_input.c,v retrieving revision 1.243 diff -u -r1.243 ip_input.c --- ip_input.c 17 Feb 2007 22:34:11 -0000 1.243 +++ ip_input.c 2 Mar 2007 22:00:40 -0000 @@ -1407,9 +1407,6 @@ dropscanidx = i; } IPQ_UNLOCK(); -#ifdef GATEWAY - ipflow_slowtimo(); -#endif splx(s); }