Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 4 Oct 2022 07:12:47 -0400
From:      Randall Stewart <rrs@netflix.com>
To:        Dmitry Chagin <dchagin@heemeyer.club>
Cc:        Gleb Smirnoff <glebius@freebsd.org>, src-committers <src-committers@freebsd.org>, "<dev-commits-src-all@freebsd.org>" <dev-commits-src-all@freebsd.org>, dev-commits-src-main@freebsd.org
Subject:   Re: git: fcb3f813f379 - main - netinet*: remove PRC_ constants and streamline ICMP processing
Message-ID:  <1B7EBA3D-9673-4E13-9F06-C295EA0FFA40@netflix.com>
In-Reply-To: <YzwUl9Rd/xBRzu%2BP@heemeyer.club>
References:  <202210040357.2943vbxw015435@gitrepo.freebsd.org> <YzwUl9Rd/xBRzu%2BP@heemeyer.club>

next in thread | previous in thread | raw e-mail | index | archive | help

--Apple-Mail=_98AE2EC2-43A2-4380-8D04-F61A7835F5FE
Content-Type: multipart/alternative;
	boundary="Apple-Mail=_FE64714B-3FA1-431C-B3A8-2221B729D6F9"


--Apple-Mail=_FE64714B-3FA1-431C-B3A8-2221B729D6F9
Content-Transfer-Encoding: quoted-printable
Content-Type: text/plain;
	charset=utf-8

Dmitry:

Yeah I hit the same issue.. I did find that if you add

nooptions       IPSEC_SUPPORT

to your build it will work. Also making LINT works
so I suspect its something minor in Gleb=E2=80=99s re-arrangement.=20
Though its like 4am right now in California so he won=E2=80=99t
be up for a while I suspect :)

R

> On Oct 4, 2022, at 7:10 AM, Dmitry Chagin <dchagin@heemeyer.club> =
wrote:
>=20
> On Tue, Oct 04, 2022 at 03:57:37AM +0000, Gleb Smirnoff wrote:
>> The branch main has been updated by glebius:
>>=20
>> URL: =
https://www.google.com/url?q=3Dhttps://cgit.FreeBSD.org/src/commit/?id%3Df=
cb3f813f379f544f9cd2a10d18045588da0e132&source=3Dgmail-imap&ust=3D16654866=
31000000&usg=3DAOvVaw2VvUECoWSpNqOYdx0tDraU
>>=20
>> commit fcb3f813f379f544f9cd2a10d18045588da0e132
>> Author:     Gleb Smirnoff <glebius@FreeBSD.org>
>> AuthorDate: 2022-10-04 03:53:04 +0000
>> Commit:     Gleb Smirnoff <glebius@FreeBSD.org>
>> CommitDate: 2022-10-04 03:53:04 +0000
>>=20
>>    netinet*: remove PRC_ constants and streamline ICMP processing
>>=20
>>    In the original design of the network stack from the protocol =
control
>>    input method pr_ctlinput was used notify the protocols about two =
very
>>    different kinds of events: internal system events and receival of =
an
>>    ICMP messages from outside.  These events were coded with PRC_ =
codes.
>>    Today these methods are removed from the protosw(9) and are =
isolated
>>    to IPv4 and IPv6 stacks and are called only from icmp*_input().  =
The
>>    PRC_ codes now just create a shim layer between ICMP codes and =
errors
>>    or actions taken by protocols.
>>=20
>>    - Change ipproto_ctlinput_t to pass just pointer to ICMP header.  =
This
>>      allows protocols to not deduct it from the internal IP header.
>>    - Change ip6proto_ctlinput_t to pass just struct ip6ctlparam =
pointer.
>>      It has all the information needed to the protocols.  In the =
structure,
>>      change ip6c_finaldst fields to sockaddr_in6.  The reason is that
>>      icmp6_input() already has this address wrapped in sockaddr, and =
the
>>      protocols want this address as sockaddr.
>>    - For UDP tunneling control input, as well as for IPSEC control =
input,
>>      change the prototypes to accept a transparent union of either =
ICMP
>>      header pointer or struct ip6ctlparam pointer.
>>    - In icmp_input() and icmp6_input() do only validation of ICMP =
header and
>>      count bad packets.  The translation of ICMP codes to =
errors/actions is
>>      done by protocols.
>>    - Provide icmp_errmap() and icmp6_errmap() as substitute to =
inetctlerrmap,
>>      inet6ctlerrmap arrays.
>>    - In protocol ctlinput methods either trust what icmp_errmap() =
recommend,
>>      or do our own logic based on the ICMP header.
>>=20
>>    Differential revision:  =
https://www.google.com/url?q=3Dhttps://reviews.freebsd.org/D36731&source=3D=
gmail-imap&ust=3D1665486631000000&usg=3DAOvVaw1JtS6e8srYG7hprLpt68zn
>> ---
>> sys/netinet/icmp6.h          |   1 +
>> sys/netinet/in_var.h         |   2 -
>> sys/netinet/ip_icmp.c        | 106 =
+++++++++++++++++++----------------
>> sys/netinet/ip_icmp.h        |   1 +
>> sys/netinet/ip_input.c       |  17 ------
>> sys/netinet/ip_var.h         |   3 +-
>> sys/netinet/raw_ip.c         |  11 +---
>> sys/netinet/sctp_usrreq.c    |  10 ++--
>> sys/netinet/sctp_var.h       |   2 +-
>> sys/netinet/sctputil.c       |  13 ++---
>> sys/netinet/tcp_subr.c       | 128 =
+++++++++++++++++++++++++------------------
>> sys/netinet/udp_usrreq.c     |  24 ++++----
>> sys/netinet/udp_var.h        |   6 +-
>> sys/netinet6/icmp6.c         | 100 ++++++++++++++++++---------------
>> sys/netinet6/in6_pcb.c       |  26 +--------
>> sys/netinet6/in6_var.h       |   1 -
>> sys/netinet6/ip6_input.c     |  20 -------
>> sys/netinet6/ip6_var.h       |  11 ++--
>> sys/netinet6/raw_ip6.c       |  31 ++---------
>> sys/netinet6/sctp6_usrreq.c  |   8 +--
>> sys/netinet6/udp6_usrreq.c   |  26 ++++-----
>> sys/netipsec/ipsec_input.c   |  24 ++++----
>> sys/netipsec/ipsec_support.h |  17 ++++--
>> sys/sys/protosw.h            |  43 ---------------
>> 24 files changed, 274 insertions(+), 357 deletions(-)
>>=20
>> diff --git a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h
>> index 9628c0957c4a..7429b8173b6a 100644
>> --- a/sys/netinet/icmp6.h
>> +++ b/sys/netinet/icmp6.h
>> @@ -701,6 +701,7 @@ struct	rttimer;
>> struct	in6_multi;
>> # endif
>> void	icmp6_paramerror(struct mbuf *, int);
>> +int	icmp6_errmap(const struct icmp6_hdr *);
>> void	icmp6_error(struct mbuf *, int, int, int);
>> void	icmp6_error2(struct mbuf *, int, int, int, struct ifnet *);
>> int	icmp6_input(struct mbuf **, int *, int);
>> diff --git a/sys/netinet/in_var.h b/sys/netinet/in_var.h
>> index 40e1c1a23c40..c4cfeea66ba8 100644
>> --- a/sys/netinet/in_var.h
>> +++ b/sys/netinet/in_var.h
>> @@ -100,8 +100,6 @@ struct in_ifaddr {
>> #define IN_LNAOF(in, ifa) \
>> 	((ntohl((in).s_addr) & ~((struct in_ifaddr =
*)(ifa)->ia_subnetmask))
>>=20
>> -extern	u_char	inetctlerrmap[];
>> -
>> #define LLTABLE(ifp)	\
>> 	((struct in_ifinfo *)(ifp)->if_afdata[AF_INET])->ii_llt
>> /*
>> diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c
>> index f0cc703c2757..fdde24fd94be 100644
>> --- a/sys/netinet/ip_icmp.c
>> +++ b/sys/netinet/ip_icmp.c
>> @@ -403,6 +403,55 @@ freeit:
>> 	m_freem(n);
>> }
>>=20
>> +int
>> +icmp_errmap(const struct icmp *icp)
>> +{
>> +
>> +	switch (icp->icmp_type) {
>> +	case ICMP_UNREACH:
>> +		switch (icp->icmp_code) {
>> +		case ICMP_UNREACH_NET:
>> +		case ICMP_UNREACH_HOST:
>> +		case ICMP_UNREACH_SRCFAIL:
>> +		case ICMP_UNREACH_NET_UNKNOWN:
>> +		case ICMP_UNREACH_HOST_UNKNOWN:
>> +		case ICMP_UNREACH_ISOLATED:
>> +		case ICMP_UNREACH_TOSNET:
>> +		case ICMP_UNREACH_TOSHOST:
>> +		case ICMP_UNREACH_HOST_PRECEDENCE:
>> +		case ICMP_UNREACH_PRECEDENCE_CUTOFF:
>> +			return (EHOSTUNREACH);
>> +		case ICMP_UNREACH_NEEDFRAG:
>> +			return (EMSGSIZE);
>> +		case ICMP_UNREACH_PROTOCOL:
>> +		case ICMP_UNREACH_PORT:
>> +		case ICMP_UNREACH_NET_PROHIB:
>> +		case ICMP_UNREACH_HOST_PROHIB:
>> +		case ICMP_UNREACH_FILTER_PROHIB:
>> +			return (ECONNREFUSED);
>> +		default:
>> +			return (0);
>> +		}
>> +	case ICMP_TIMXCEED:
>> +		switch (icp->icmp_code) {
>> +		case ICMP_TIMXCEED_INTRANS:
>> +			return (EHOSTUNREACH);
>> +		default:
>> +			return (0);
>> +		}
>> +	case ICMP_PARAMPROB:
>> +		switch (icp->icmp_code) {
>> +		case ICMP_PARAMPROB_ERRATPTR:
>> +		case ICMP_PARAMPROB_OPTABSENT:
>> +			return (ENOPROTOOPT);
>> +		default:
>> +			return (0);
>> +		}
>> +	default:
>> +		return (0);
>> +	}
>> +}
>> +
>> /*
>>  * Process a received ICMP message.
>>  */
>> @@ -484,56 +533,21 @@ icmp_input(struct mbuf **mp, int *offp, int =
proto)
>> 	code =3D icp->icmp_code;
>> 	switch (icp->icmp_type) {
>> 	case ICMP_UNREACH:
>> -		switch (code) {
>> -			case ICMP_UNREACH_NET:
>> -			case ICMP_UNREACH_HOST:
>> -			case ICMP_UNREACH_SRCFAIL:
>> -			case ICMP_UNREACH_NET_UNKNOWN:
>> -			case ICMP_UNREACH_HOST_UNKNOWN:
>> -			case ICMP_UNREACH_ISOLATED:
>> -			case ICMP_UNREACH_TOSNET:
>> -			case ICMP_UNREACH_TOSHOST:
>> -			case ICMP_UNREACH_HOST_PRECEDENCE:
>> -			case ICMP_UNREACH_PRECEDENCE_CUTOFF:
>> -				code =3D PRC_UNREACH_NET;
>> -				break;
>> -
>> -			case ICMP_UNREACH_NEEDFRAG:
>> -				code =3D PRC_MSGSIZE;
>> -				break;
>> -
>> -			/*
>> -			 * RFC 1122, Sections 3.2.2.1 and 4.2.3.9.
>> -			 * Treat subcodes 2,3 as immediate RST
>> -			 */
>> -			case ICMP_UNREACH_PROTOCOL:
>> -				code =3D PRC_UNREACH_PROTOCOL;
>> -				break;
>> -			case ICMP_UNREACH_PORT:
>> -				code =3D PRC_UNREACH_PORT;
>> -				break;
>> -
>> -			case ICMP_UNREACH_NET_PROHIB:
>> -			case ICMP_UNREACH_HOST_PROHIB:
>> -			case ICMP_UNREACH_FILTER_PROHIB:
>> -				code =3D PRC_UNREACH_ADMIN_PROHIB;
>> -				break;
>> -
>> -			default:
>> -				goto badcode;
>> -		}
>> -		goto deliver;
>> +		if (code > ICMP_UNREACH_PRECEDENCE_CUTOFF)
>> +			goto badcode;
>> +		else
>> +			goto deliver;
>>=20
>> 	case ICMP_TIMXCEED:
>> -		if (code > 1)
>> +		if (code > ICMP_TIMXCEED_REASS)
>> 			goto badcode;
>> -		code +=3D PRC_TIMXCEED_INTRANS;
>> -		goto deliver;
>> +		else
>> +			goto deliver;
>>=20
>> 	case ICMP_PARAMPROB:
>> -		if (code > 1)
>> +		if (code > ICMP_PARAMPROB_LENGTH)
>> 			goto badcode;
>> -		code =3D PRC_PARAMPROB;
>> +
>> 	deliver:
>> 		/*
>> 		 * Problem with datagram; advise higher level routines.
>> @@ -553,7 +567,6 @@ icmp_input(struct mbuf **mp, int *offp, int =
proto)
>> 		if (icmpprintfs)
>> 			printf("deliver to protocol %d\n", =
icp->icmp_ip.ip_p);
>> #endif
>> -		icmpsrc.sin_addr =3D icp->icmp_ip.ip_dst;
>> 		/*
>> 		 * XXX if the packet contains [IPv4 AH TCP], we can't =
make a
>> 		 * notification to TCP layer.
>> @@ -576,8 +589,7 @@ icmp_input(struct mbuf **mp, int *offp, int =
proto)
>> 		 *   ICMP_ADVLENPREF. See its definition in ip_icmp.h.
>> 		 */
>> 		if (ip_ctlprotox[icp->icmp_ip.ip_p] !=3D NULL)
>> -			ip_ctlprotox[icp->icmp_ip.ip_p](code, &icmpsrc,
>> -			    &icp->icmp_ip);
>> +			ip_ctlprotox[icp->icmp_ip.ip_p](icp);
>> 		break;
>>=20
>> 	badcode:
>> diff --git a/sys/netinet/ip_icmp.h b/sys/netinet/ip_icmp.h
>> index 0303a09509c7..fefece665a00 100644
>> --- a/sys/netinet/ip_icmp.h
>> +++ b/sys/netinet/ip_icmp.h
>> @@ -216,6 +216,7 @@ struct icmp {
>> 	(type) =3D=3D ICMP_MASKREQ || (type) =3D=3D ICMP_MASKREPLY)
>>=20
>> #ifdef _KERNEL
>> +int	icmp_errmap(const struct icmp *);
>> void	icmp_error(struct mbuf *, int, int, uint32_t, int);
>> int	icmp_input(struct mbuf **, int *, int);
>> int	ip_next_mtu(int, int);
>> diff --git a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c
>> index 145c4464b855..88fd4f5e4def 100644
>> --- a/sys/netinet/ip_input.c
>> +++ b/sys/netinet/ip_input.c
>> @@ -873,23 +873,6 @@ ipproto_unregister(uint8_t proto)
>> 		return (ENOENT);
>> }
>>=20
>> -/* (x) - issued by icmp_input() */
>> -u_char inetctlerrmap[PRC_NCMDS] =3D {
>> -	[PRC_MSGSIZE] =3D EMSGSIZE,			/* (x) */
>> -	[PRC_HOSTDEAD] =3D EHOSTDOWN,
>> -	[PRC_HOSTUNREACH] =3D EHOSTUNREACH,
>> -	[PRC_UNREACH_NET] =3D EHOSTUNREACH,		/* (x) */
>> -	[PRC_UNREACH_HOST] =3D EHOSTUNREACH,
>> -	[PRC_UNREACH_PROTOCOL] =3D ECONNREFUSED,		/* (x) =
*/
>> -	[PRC_UNREACH_PORT] =3D ECONNREFUSED,		/* (x) */
>> -	[12] =3D EMSGSIZE,
>> -	[PRC_UNREACH_SRCFAIL] =3D EHOSTUNREACH,
>> -	[PRC_TIMXCEED_INTRANS] =3D EHOSTUNREACH,		/* (x) =
*/
>> -	[PRC_TIMXCEED_REASS] =3D 0,			/* (x) */
>> -	[PRC_PARAMPROB] =3D ENOPROTOOPT,			/* (x) =
*/
>> -	[PRC_UNREACH_ADMIN_PROHIB] =3D ECONNREFUSED,	/* (x) */
>> -};
>> -
>> /*
>>  * Forward a packet.  If some error occurs return the sender
>>  * an icmp packet.  Note we can't always generate a meaningful
>> diff --git a/sys/netinet/ip_var.h b/sys/netinet/ip_var.h
>> index 070c82677150..0a2d915b12b3 100644
>> --- a/sys/netinet/ip_var.h
>> +++ b/sys/netinet/ip_var.h
>> @@ -238,7 +238,8 @@ extern void	(*ip_rsvp_force_done)(struct =
socket *);
>> extern int	(*rsvp_input_p)(struct mbuf **, int *, int);
>>=20
>> typedef int	ipproto_input_t(struct mbuf **, int *, int);
>> -typedef void	ipproto_ctlinput_t(int, struct sockaddr_in *, =
struct ip *);
>> +struct icmp;
>> +typedef void	ipproto_ctlinput_t(struct icmp *);
>> int	ipproto_register(uint8_t, ipproto_input_t, ipproto_ctlinput_t);
>> int	ipproto_unregister(uint8_t);
>> #define	IPPROTO_REGISTER(prot, input, ctl)	do {			=
\
>> diff --git a/sys/netinet/raw_ip.c b/sys/netinet/raw_ip.c
>> index fb692e0822cf..2065b47883bb 100644
>> --- a/sys/netinet/raw_ip.c
>> +++ b/sys/netinet/raw_ip.c
>> @@ -804,17 +804,12 @@ rip_ctloutput(struct socket *so, struct sockopt =
*sopt)
>> }
>>=20
>> void
>> -rip_ctlinput(int cmd, struct sockaddr_in *sin, struct ip *ip)
>> +rip_ctlinput(struct icmp *icmp)
>> {
>> -
>> -	switch (cmd) {
>> #if defined(IPSEC) || defined(IPSEC_SUPPORT)
>> -	case PRC_MSGSIZE:
>> -		if (IPSEC_ENABLED(ipv4))
>> -			IPSEC_CTLINPUT(ipv4, cmd, (struct sockaddr =
*)sin, ip);
>> -		break;
>> +	if (IPSEC_ENABLED(ipv4))
>> +		IPSEC_CTLINPUT(ipv4, icmp);
>> #endif
>=20
> hi,=20
>=20
> me/dchagin/freebsd/sys/netinet/raw_ip.c:811:3: error: too few =
arguments
> to function call, expected 4, have 2
>                IPSEC_CTLINPUT(ipv4, icmp);
>=20
> /home/dchagin/freebsd/sys/netipsec/ipsec_support.h:222:61: note:
> expanded from macro 'IPSEC_CTLINPUT'
>    ipsec_kmod_ctlinput(proto ## _ipsec_support, __VA_ARGS__)
>=20
>=20
> /home/dchagin/freebsd/sys/netipsec/ipsec_support.h:196:5: note:
> 'ipsec_kmod_ctlinput' declared here
> int ipsec_kmod_ctlinput(struct ipsec_support * const, int,
>=20
>=20
> 1 error generated.
> *** [raw_ip.o] Error code 1
>=20
>=20

------
Randall Stewart
rrs@netflix.com




--Apple-Mail=_FE64714B-3FA1-431C-B3A8-2221B729D6F9
Content-Transfer-Encoding: quoted-printable
Content-Type: text/html;
	charset=utf-8

<html><head><meta http-equiv=3D"Content-Type" content=3D"text/html; =
charset=3Dutf-8"></head><body style=3D"word-wrap: break-word; =
-webkit-nbsp-mode: space; line-break: after-white-space;" =
class=3D"">Dmitry:<div class=3D""><br class=3D""></div><div =
class=3D"">Yeah I hit the same issue.. I did find that if you =
add</div><div class=3D""><br class=3D""></div><div class=3D""><div =
style=3D"margin: 0px; font-stretch: normal; font-size: 12px; =
line-height: normal; font-family: Menlo;" class=3D""><span =
style=3D"font-variant-ligatures: no-common-ligatures" class=3D"">nooptions=
 &nbsp; &nbsp; &nbsp; IPSEC_SUPPORT</span></div><div style=3D"margin: =
0px; font-stretch: normal; font-size: 12px; line-height: normal; =
font-family: Menlo;" class=3D""><br class=3D""></div><div style=3D"margin:=
 0px; font-stretch: normal; font-size: 12px; line-height: normal; =
font-family: Menlo;" class=3D"">to your build it will work. Also making =
LINT works</div><div style=3D"margin: 0px; font-stretch: normal; =
font-size: 12px; line-height: normal; font-family: Menlo;" =
class=3D""><span style=3D"font-variant-ligatures: no-common-ligatures" =
class=3D"">so I suspect its something minor in Gleb=E2=80=99s =
re-arrangement.&nbsp;</span></div><div style=3D"margin: 0px; =
font-stretch: normal; font-size: 12px; line-height: normal; font-family: =
Menlo;" class=3D""><span style=3D"font-variant-ligatures: =
no-common-ligatures" class=3D"">Though its like 4am right now in =
California so he won=E2=80=99t</span></div><div style=3D"margin: 0px; =
font-stretch: normal; font-size: 12px; line-height: normal; font-family: =
Menlo;" class=3D""><span style=3D"font-variant-ligatures: =
no-common-ligatures" class=3D"">be up for a while I suspect =
:)</span></div><div style=3D"margin: 0px; font-stretch: normal; =
font-size: 12px; line-height: normal; font-family: Menlo;" =
class=3D""><span style=3D"font-variant-ligatures: no-common-ligatures" =
class=3D""><br class=3D""></span></div><div style=3D"margin: 0px; =
font-stretch: normal; font-size: 12px; line-height: normal; font-family: =
Menlo;" class=3D""><span style=3D"font-variant-ligatures: =
no-common-ligatures" class=3D"">R</span></div><div><br =
class=3D""><blockquote type=3D"cite" class=3D""><div class=3D"">On Oct =
4, 2022, at 7:10 AM, Dmitry Chagin &lt;<a =
href=3D"mailto:dchagin@heemeyer.club" =
class=3D"">dchagin@heemeyer.club</a>&gt; wrote:</div><br =
class=3D"Apple-interchange-newline"><div class=3D""><div class=3D"">On =
Tue, Oct 04, 2022 at 03:57:37AM +0000, Gleb Smirnoff wrote:<br =
class=3D""><blockquote type=3D"cite" class=3D"">The branch main has been =
updated by glebius:<br class=3D""><br class=3D"">URL: <a =
href=3D"https://www.google.com/url?q=3Dhttps://cgit.FreeBSD.org/src/commit=
/?id%3Dfcb3f813f379f544f9cd2a10d18045588da0e132&amp;source=3Dgmail-imap&am=
p;ust=3D1665486631000000&amp;usg=3DAOvVaw2VvUECoWSpNqOYdx0tDraU" =
class=3D"">https://www.google.com/url?q=3Dhttps://cgit.FreeBSD.org/src/com=
mit/?id%3Dfcb3f813f379f544f9cd2a10d18045588da0e132&amp;source=3Dgmail-imap=
&amp;ust=3D1665486631000000&amp;usg=3DAOvVaw2VvUECoWSpNqOYdx0tDraU</a><br =
class=3D""><br class=3D"">commit =
fcb3f813f379f544f9cd2a10d18045588da0e132<br class=3D"">Author: =
&nbsp;&nbsp;&nbsp;&nbsp;Gleb Smirnoff &lt;<a =
href=3D"mailto:glebius@FreeBSD.org" =
class=3D"">glebius@FreeBSD.org</a>&gt;<br class=3D"">AuthorDate: =
2022-10-04 03:53:04 +0000<br class=3D"">Commit: =
&nbsp;&nbsp;&nbsp;&nbsp;Gleb Smirnoff &lt;<a =
href=3D"mailto:glebius@FreeBSD.org" =
class=3D"">glebius@FreeBSD.org</a>&gt;<br class=3D"">CommitDate: =
2022-10-04 03:53:04 +0000<br class=3D""><br class=3D""> =
&nbsp;&nbsp;&nbsp;netinet*: remove PRC_ constants and streamline ICMP =
processing<br class=3D""><br class=3D""> &nbsp;&nbsp;&nbsp;In the =
original design of the network stack from the protocol control<br =
class=3D""> &nbsp;&nbsp;&nbsp;input method pr_ctlinput was used notify =
the protocols about two very<br class=3D""> &nbsp;&nbsp;&nbsp;different =
kinds of events: internal system events and receival of an<br class=3D""> =
&nbsp;&nbsp;&nbsp;ICMP messages from outside. &nbsp;These events were =
coded with PRC_ codes.<br class=3D""> &nbsp;&nbsp;&nbsp;Today these =
methods are removed from the protosw(9) and are isolated<br class=3D""> =
&nbsp;&nbsp;&nbsp;to IPv4 and IPv6 stacks and are called only from =
icmp*_input(). &nbsp;The<br class=3D""> &nbsp;&nbsp;&nbsp;PRC_ codes now =
just create a shim layer between ICMP codes and errors<br class=3D""> =
&nbsp;&nbsp;&nbsp;or actions taken by protocols.<br class=3D""><br =
class=3D""> &nbsp;&nbsp;&nbsp;- Change ipproto_ctlinput_t to pass just =
pointer to ICMP header. &nbsp;This<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;allows protocols to not deduct it from the =
internal IP header.<br class=3D""> &nbsp;&nbsp;&nbsp;- Change =
ip6proto_ctlinput_t to pass just struct ip6ctlparam pointer.<br =
class=3D""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;It has all the information =
needed to the protocols. &nbsp;In the structure,<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change ip6c_finaldst fields to =
sockaddr_in6. &nbsp;The reason is that<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;icmp6_input() already has this address =
wrapped in sockaddr, and the<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protocols want this address as =
sockaddr.<br class=3D""> &nbsp;&nbsp;&nbsp;- For UDP tunneling control =
input, as well as for IPSEC control input,<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;change the prototypes to accept a =
transparent union of either ICMP<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;header pointer or struct ip6ctlparam =
pointer.<br class=3D""> &nbsp;&nbsp;&nbsp;- In icmp_input() and =
icmp6_input() do only validation of ICMP header and<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;count bad packets. &nbsp;The translation =
of ICMP codes to errors/actions is<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;done by protocols.<br class=3D""> =
&nbsp;&nbsp;&nbsp;- Provide icmp_errmap() and icmp6_errmap() as =
substitute to inetctlerrmap,<br class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inet6ctlerrmap arrays.<br class=3D""> =
&nbsp;&nbsp;&nbsp;- In protocol ctlinput methods either trust what =
icmp_errmap() recommend,<br class=3D""> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or =
do our own logic based on the ICMP header.<br class=3D""><br class=3D""> =
&nbsp;&nbsp;&nbsp;Differential revision: &nbsp;<a =
href=3D"https://www.google.com/url?q=3Dhttps://reviews.freebsd.org/D36731&=
amp;source=3Dgmail-imap&amp;ust=3D1665486631000000&amp;usg=3DAOvVaw1JtS6e8=
srYG7hprLpt68zn" =
class=3D"">https://www.google.com/url?q=3Dhttps://reviews.freebsd.org/D367=
31&amp;source=3Dgmail-imap&amp;ust=3D1665486631000000&amp;usg=3DAOvVaw1JtS=
6e8srYG7hprLpt68zn</a><br class=3D"">---<br class=3D""> =
sys/netinet/icmp6.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;1 =
+<br class=3D""> sys/netinet/in_var.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;2 -<br =
class=3D""> sys/netinet/ip_icmp.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 106 =
+++++++++++++++++++----------------<br class=3D""> sys/netinet/ip_icmp.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;1 +<br class=3D"">=
 sys/netinet/ip_input.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;17 =
------<br class=3D""> sys/netinet/ip_var.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;3 +-<br =
class=3D""> sys/netinet/raw_ip.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;11 +---<br =
class=3D""> sys/netinet/sctp_usrreq.c &nbsp;&nbsp;&nbsp;| &nbsp;10 =
++--<br class=3D""> sys/netinet/sctp_var.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;2 +-<br class=3D""> =
sys/netinet/sctputil.c &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;13 =
++---<br class=3D""> sys/netinet/tcp_subr.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 128 =
+++++++++++++++++++++++++------------------<br class=3D""> =
sys/netinet/udp_usrreq.c &nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;24 ++++----<br =
class=3D""> sys/netinet/udp_var.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;&nbsp;6 +-<br =
class=3D""> sys/netinet6/icmp6.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| 100 =
++++++++++++++++++---------------<br class=3D""> sys/netinet6/in6_pcb.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;26 +--------<br class=3D""> =
sys/netinet6/in6_var.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| =
&nbsp;&nbsp;1 -<br class=3D""> sys/netinet6/ip6_input.c =
&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;20 -------<br class=3D""> =
sys/netinet6/ip6_var.h &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;11 =
++--<br class=3D""> sys/netinet6/raw_ip6.c =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| &nbsp;31 ++---------<br class=3D""> =
sys/netinet6/sctp6_usrreq.c &nbsp;| &nbsp;&nbsp;8 +--<br class=3D""> =
sys/netinet6/udp6_usrreq.c &nbsp;&nbsp;| &nbsp;26 ++++-----<br class=3D"">=
 sys/netipsec/ipsec_input.c &nbsp;&nbsp;| &nbsp;24 ++++----<br class=3D"">=
 sys/netipsec/ipsec_support.h | &nbsp;17 ++++--<br class=3D""> =
sys/sys/protosw.h =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| =
&nbsp;43 ---------------<br class=3D""> 24 files changed, 274 =
insertions(+), 357 deletions(-)<br class=3D""><br class=3D"">diff --git =
a/sys/netinet/icmp6.h b/sys/netinet/icmp6.h<br class=3D"">index =
9628c0957c4a..7429b8173b6a 100644<br class=3D"">--- =
a/sys/netinet/icmp6.h<br class=3D"">+++ b/sys/netinet/icmp6.h<br =
class=3D"">@@ -701,6 +701,7 @@ struct<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>rttimer;<br class=3D""> =
struct<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>in6_multi;<br class=3D""> # endif<br class=3D""> void<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp6_paramerror(struct mbuf *, int);<br class=3D"">+int<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp6_errmap(const struct icmp6_hdr *);<br class=3D""> void<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp6_error(struct mbuf *, int, int, int);<br class=3D""> =
void<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp6_error2(struct mbuf *, int, int, int, struct ifnet *);<br =
class=3D""> int<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp6_input(struct mbuf **, int *, int);<br class=3D"">diff --git =
a/sys/netinet/in_var.h b/sys/netinet/in_var.h<br class=3D"">index =
40e1c1a23c40..c4cfeea66ba8 100644<br class=3D"">--- =
a/sys/netinet/in_var.h<br class=3D"">+++ b/sys/netinet/in_var.h<br =
class=3D"">@@ -100,8 +100,6 @@ struct in_ifaddr {<br class=3D""> #define =
IN_LNAOF(in, ifa) \<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>((ntohl((in).s_addr) &amp; =
~((struct in_ifaddr *)(ifa)-&gt;ia_subnetmask))<br class=3D""><br =
class=3D"">-extern<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>u_char<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>inetctlerrmap[];<br class=3D"">-<br class=3D""> #define =
LLTABLE(ifp)<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>\<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>((struct in_ifinfo =
*)(ifp)-&gt;if_afdata[AF_INET])-&gt;ii_llt<br class=3D""> /*<br =
class=3D"">diff --git a/sys/netinet/ip_icmp.c b/sys/netinet/ip_icmp.c<br =
class=3D"">index f0cc703c2757..fdde24fd94be 100644<br class=3D"">--- =
a/sys/netinet/ip_icmp.c<br class=3D"">+++ b/sys/netinet/ip_icmp.c<br =
class=3D"">@@ -403,6 +403,55 @@ freeit:<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>m_freem(n);<br class=3D""> }<br class=3D""><br class=3D"">+int<br =
class=3D"">+icmp_errmap(const struct icmp *icp)<br class=3D"">+{<br =
class=3D"">+<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>switch (icp-&gt;icmp_type) {<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>switch (icp-&gt;icmp_code) {<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_NET:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_HOST:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_SRCFAIL:<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_NET_UNKNOWN:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_HOST_UNKNOWN:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_ISOLATED:<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_TOSNET:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_TOSHOST:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_HOST_PRECEDENCE:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_PRECEDENCE_CUTOFF:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>return =
(EHOSTUNREACH);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_NEEDFRAG:<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>return (EMSGSIZE);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_PROTOCOL:<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_PORT:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_NET_PROHIB:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_HOST_PROHIB:<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_FILTER_PROHIB:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>return =
(ECONNREFUSED);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>default:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>return =
(0);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>}<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_TIMXCEED:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>switch (icp-&gt;icmp_code) {<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_TIMXCEED_INTRANS:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>return =
(EHOSTUNREACH);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>default:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>return =
(0);<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>}<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_PARAMPROB:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>switch (icp-&gt;icmp_code) {<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_PARAMPROB_ERRATPTR:<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_PARAMPROB_OPTABSENT:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>return (ENOPROTOOPT);<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>default:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>return (0);<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>}<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>default:<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>return (0);<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>}<br =
class=3D"">+}<br class=3D"">+<br class=3D""> /*<br class=3D""> &nbsp;* =
Process a received ICMP message.<br class=3D""> &nbsp;*/<br class=3D"">@@ =
-484,56 +533,21 @@ icmp_input(struct mbuf **mp, int *offp, int proto)<br =
class=3D""> <span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>code =3D icp-&gt;icmp_code;<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>switch =
(icp-&gt;icmp_type) {<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>switch (code) {<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_NET:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_HOST:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_SRCFAIL:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_NET_UNKNOWN:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_HOST_UNKNOWN:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_ISOLATED:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_TOSNET:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_TOSHOST:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_HOST_PRECEDENCE:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_PRECEDENCE_CUTOFF:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>code =3D =
PRC_UNREACH_NET;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>break;<br class=3D"">-<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_NEEDFRAG:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>code =3D =
PRC_MSGSIZE;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>break;<br class=3D"">-<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/*<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span> * RFC 1122, Sections 3.2.2.1 and =
4.2.3.9.<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span> * Treat subcodes 2,3 as =
immediate RST<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span> */<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_PROTOCOL:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>code =3D PRC_UNREACH_PROTOCOL;<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>break;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_PORT:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>code =3D PRC_UNREACH_PORT;<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>break;<br =
class=3D"">-<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_UNREACH_NET_PROHIB:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>case ICMP_UNREACH_HOST_PROHIB:<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_UNREACH_FILTER_PROHIB:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>code =3D =
PRC_UNREACH_ADMIN_PROHIB;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>break;<br class=3D"">-<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>default:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>goto badcode;<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>}<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>goto deliver;<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (code &gt; =
ICMP_UNREACH_PRECEDENCE_CUTOFF)<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>goto =
badcode;<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>else<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>goto =
deliver;<br class=3D""><br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>case ICMP_TIMXCEED:<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>if (code &gt; 1)<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (code &gt; =
ICMP_TIMXCEED_REASS)<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>goto badcode;<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>code +=3D =
PRC_TIMXCEED_INTRANS;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>goto deliver;<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>else<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>goto deliver;<br class=3D""><br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
ICMP_PARAMPROB:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (code &gt; 1)<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>if (code &gt; ICMP_PARAMPROB_LENGTH)<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>goto =
badcode;<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>code =3D PRC_PARAMPROB;<br =
class=3D"">+<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>deliver:<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>/*<br =
class=3D""> <span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span> * Problem with datagram; advise higher level routines.<br =
class=3D"">@@ -553,7 +567,6 @@ icmp_input(struct mbuf **mp, int *offp, =
int proto)<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (icmpprintfs)<br class=3D""> =
<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>printf("deliver to protocol %d\n", icp-&gt;icmp_ip.ip_p);<br =
class=3D""> #endif<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>icmpsrc.sin_addr =3D =
icp-&gt;icmp_ip.ip_dst;<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>/*<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span> * XXX if =
the packet contains [IPv4 AH TCP], we can't make a<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span> * =
notification to TCP layer.<br class=3D"">@@ -576,8 +589,7 @@ =
icmp_input(struct mbuf **mp, int *offp, int proto)<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span> * =
&nbsp;&nbsp;ICMP_ADVLENPREF. See its definition in ip_icmp.h.<br =
class=3D""> <span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span> */<br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if =
(ip_ctlprotox[icp-&gt;icmp_ip.ip_p] !=3D NULL)<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ip_ctlprotox[icp-&gt;icmp_ip.ip_p](code, &amp;icmpsrc,<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span> &nbsp;&nbsp;&nbsp;&amp;icp-&gt;icmp_ip);<br class=3D"">+<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ip_ctlprotox[icp-&gt;icmp_ip.ip_p](icp);<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>break;<br =
class=3D""><br class=3D""> <span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>badcode:<br class=3D"">diff --git =
a/sys/netinet/ip_icmp.h b/sys/netinet/ip_icmp.h<br class=3D"">index =
0303a09509c7..fefece665a00 100644<br class=3D"">--- =
a/sys/netinet/ip_icmp.h<br class=3D"">+++ b/sys/netinet/ip_icmp.h<br =
class=3D"">@@ -216,6 +216,7 @@ struct icmp {<br class=3D""> <span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>(type) =3D=3D=
 ICMP_MASKREQ || (type) =3D=3D ICMP_MASKREPLY)<br class=3D""><br =
class=3D""> #ifdef _KERNEL<br class=3D"">+int<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp_errmap(const struct icmp *);<br class=3D""> void<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp_error(struct mbuf *, int, int, uint32_t, int);<br class=3D""> =
int<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>icmp_input(struct mbuf **, int *, int);<br class=3D""> int<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ip_next_mtu(int, int);<br class=3D"">diff --git =
a/sys/netinet/ip_input.c b/sys/netinet/ip_input.c<br class=3D"">index =
145c4464b855..88fd4f5e4def 100644<br class=3D"">--- =
a/sys/netinet/ip_input.c<br class=3D"">+++ b/sys/netinet/ip_input.c<br =
class=3D"">@@ -873,23 +873,6 @@ ipproto_unregister(uint8_t proto)<br =
class=3D""> <span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>return (ENOENT);<br class=3D""> }<br class=3D""><br class=3D"">-/* =
(x) - issued by icmp_input() */<br class=3D"">-u_char =
inetctlerrmap[PRC_NCMDS] =3D {<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_MSGSIZE] =3D EMSGSIZE,<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>/* (x) */<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_HOSTDEAD] =3D EHOSTDOWN,<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_HOSTUNREACH] =3D EHOSTUNREACH,<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_UNREACH_NET] =3D EHOSTUNREACH,<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>/* (x) */<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_UNREACH_HOST] =3D EHOSTUNREACH,<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_UNREACH_PROTOCOL] =3D ECONNREFUSED,<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>/* (x) =
*/<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>[PRC_UNREACH_PORT] =3D =
ECONNREFUSED,<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/* (x) */<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>[12] =3D EMSGSIZE,<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_UNREACH_SRCFAIL] =3D EHOSTUNREACH,<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>[PRC_TIMXCEED_INTRANS] =3D EHOSTUNREACH,<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>/* (x) =
*/<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>[PRC_TIMXCEED_REASS] =3D 0,<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span><span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>/* (x) =
*/<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>[PRC_PARAMPROB] =3D =
ENOPROTOOPT,<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/* (x) */<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>[PRC_UNREACH_ADMIN_PROHIB] =3D =
ECONNREFUSED,<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>/* (x) */<br class=3D"">-};<br class=3D"">-<br class=3D""> /*<br =
class=3D""> &nbsp;* Forward a packet. &nbsp;If some error occurs return =
the sender<br class=3D""> &nbsp;* an icmp packet. &nbsp;Note we can't =
always generate a meaningful<br class=3D"">diff --git =
a/sys/netinet/ip_var.h b/sys/netinet/ip_var.h<br class=3D"">index =
070c82677150..0a2d915b12b3 100644<br class=3D"">--- =
a/sys/netinet/ip_var.h<br class=3D"">+++ b/sys/netinet/ip_var.h<br =
class=3D"">@@ -238,7 +238,8 @@ extern void<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>(*ip_rsvp_force_done)(struct =
socket *);<br class=3D""> extern int<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>(*rsvp_input_p)(struct mbuf **, =
int *, int);<br class=3D""><br class=3D""> typedef int<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ipproto_input_t(struct mbuf **, int *, int);<br class=3D"">-typedef=
 void<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ipproto_ctlinput_t(int, struct sockaddr_in *, struct ip *);<br =
class=3D"">+struct icmp;<br class=3D"">+typedef void<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ipproto_ctlinput_t(struct icmp *);<br class=3D""> int<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>ipproto_register(uint8_t, ipproto_input_t, =
ipproto_ctlinput_t);<br class=3D""> int<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>ipproto_unregister(uint8_t);<br =
class=3D""> #define<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>IPPROTO_REGISTER(prot, input, =
ctl)<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>do {<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>\<br class=3D"">diff --git a/sys/netinet/raw_ip.c =
b/sys/netinet/raw_ip.c<br class=3D"">index fb692e0822cf..2065b47883bb =
100644<br class=3D"">--- a/sys/netinet/raw_ip.c<br class=3D"">+++ =
b/sys/netinet/raw_ip.c<br class=3D"">@@ -804,17 +804,12 @@ =
rip_ctloutput(struct socket *so, struct sockopt *sopt)<br class=3D""> =
}<br class=3D""><br class=3D""> void<br class=3D"">-rip_ctlinput(int =
cmd, struct sockaddr_in *sin, struct ip *ip)<br =
class=3D"">+rip_ctlinput(struct icmp *icmp)<br class=3D""> {<br =
class=3D"">-<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>switch (cmd) {<br class=3D""> #if =
defined(IPSEC) || defined(IPSEC_SUPPORT)<br class=3D"">-<span =
class=3D"Apple-tab-span" style=3D"white-space:pre">	</span>case =
PRC_MSGSIZE:<br class=3D"">-<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span><span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (IPSEC_ENABLED(ipv4))<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>IPSEC_CTLINPUT(ipv4, cmd, (struct sockaddr *)sin, ip);<br =
class=3D"">-<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>break;<br class=3D"">+<span class=3D"Apple-tab-span" =
style=3D"white-space:pre">	</span>if (IPSEC_ENABLED(ipv4))<br =
class=3D"">+<span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span><span class=3D"Apple-tab-span" style=3D"white-space:pre">	=
</span>IPSEC_CTLINPUT(ipv4, icmp);<br class=3D""> #endif<br =
class=3D""></blockquote><br class=3D"">hi, <br class=3D""><br =
class=3D"">me/dchagin/freebsd/sys/netinet/raw_ip.c:811:3: error: too few =
arguments<br class=3D"">to function call, expected 4, have 2<br =
class=3D""> =
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;IPSEC_CTLINPUT(ipv4, icmp);<br class=3D""><br =
class=3D"">/home/dchagin/freebsd/sys/netipsec/ipsec_support.h:222:61: =
note:<br class=3D"">expanded from macro 'IPSEC_CTLINPUT'<br class=3D""> =
&nbsp;&nbsp;&nbsp;ipsec_kmod_ctlinput(proto ## _ipsec_support, =
__VA_ARGS__)<br class=3D""><br class=3D""><br =
class=3D"">/home/dchagin/freebsd/sys/netipsec/ipsec_support.h:196:5: =
note:<br class=3D"">'ipsec_kmod_ctlinput' declared here<br class=3D"">int =
ipsec_kmod_ctlinput(struct ipsec_support * const, int,<br class=3D""><br =
class=3D""><br class=3D"">1 error generated.<br class=3D"">*** =
[raw_ip.o] Error code 1<br class=3D""><br class=3D""><br =
class=3D""></div></div></blockquote></div><br class=3D""><div class=3D"">
<div style=3D"caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); =
font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;">------</div><div style=3D"caret-color: rgb(0, 0, =
0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; =
font-style: normal; font-variant-caps: normal; font-weight: normal; =
letter-spacing: normal; orphans: auto; text-align: start; text-indent: =
0px; text-transform: none; white-space: normal; widows: auto; =
word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px; text-decoration: none;">Randall =
Stewart</div><div style=3D"caret-color: rgb(0, 0, 0); color: rgb(0, 0, =
0); font-family: Helvetica; font-size: 12px; font-style: normal; =
font-variant-caps: normal; font-weight: normal; letter-spacing: normal; =
orphans: auto; text-align: start; text-indent: 0px; text-transform: =
none; white-space: normal; widows: auto; word-spacing: 0px; =
-webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; =
text-decoration: none;"><a href=3D"mailto:rrs@netflix.com" =
class=3D"">rrs@netflix.com</a></div><div style=3D"caret-color: rgb(0, 0, =
0); color: rgb(0, 0, 0); font-family: Helvetica; font-size: 12px; =
font-style: normal; font-variant-caps: normal; font-weight: normal; =
letter-spacing: normal; orphans: auto; text-align: start; text-indent: =
0px; text-transform: none; white-space: normal; widows: auto; =
word-spacing: 0px; -webkit-text-size-adjust: auto; =
-webkit-text-stroke-width: 0px; text-decoration: none;" class=3D""><br =
class=3D""></div><br class=3D"Apple-interchange-newline">
</div>
<br class=3D""></div></body></html>=

--Apple-Mail=_FE64714B-3FA1-431C-B3A8-2221B729D6F9--

--Apple-Mail=_98AE2EC2-43A2-4380-8D04-F61A7835F5FE
Content-Disposition: attachment;
	filename=smime.p7s
Content-Type: application/pkcs7-signature;
	name=smime.p7s
Content-Transfer-Encoding: base64

MIAGCSqGSIb3DQEHAqCAMIACAQExDzANBglghkgBZQMEAgEFADCABgkqhkiG9w0BBwEAAKCCAzYw
ggMyMIICGqADAgECAgqxywKqrHPB2ybTMA0GCSqGSIb3DQEBCwUAMEcxGDAWBgNVBAMTD1JhbmRh
bGwgU3Rld2FydDEeMBwGCSqGSIb3DQEJARYPcnJzQG5ldGZsaXguY29tMQswCQYDVQQGEwJVUzAe
Fw0yMTAxMjQxMjIwMTRaFw0yNjAxMjQxMjIwMTRaMEcxGDAWBgNVBAMTD1JhbmRhbGwgU3Rld2Fy
dDEeMBwGCSqGSIb3DQEJARYPcnJzQG5ldGZsaXguY29tMQswCQYDVQQGEwJVUzCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAMUAht2nr/NFlK+tmmN9PdO3DBPfeYh9fLcbVihR+/dipO41
AsFy9y+2uDVaFhTEvp406P0o9PQQTuYXqrCr76eWQIj3V787e1WKjTup1mIyQeWHGf1gvb/7vmI2
zHg6QZEIC4W8xeO8SLKyHiwlFHZn8Rn1HxtB7Ge+NulygkgUgJYhXD5E29jVGXAc6Qn9Vr9AexPf
KaOhHCaNB/Twcinayz6D8CO/Ym1LOs3+ceSOa4cB07fepmbqDSXDkOeA3U7KLaluHrRTlj6DO+JU
nqKXX7jJ68KTYSZ0qH4fZsk8cxFkwYI/3HDJi+oF+FDkf7SRo1Q2w+e3M/5MReLIQ7sCAwEAAaMg
MB4wDwYJKoZIhvcvAQEKBAIFADALBgNVHQ8EBAMCB4AwDQYJKoZIhvcNAQELBQADggEBAHJfum1j
1WIVFjOJT/hqMIN751aXkablmwesW94lNJKjslPULbbcP5nZGg2lGpHcZ+0I5F/1TTiEsT2H2rhA
uAnSsUxTpxRA+aoe+xtJOa5vle3CprhFkHAvB7EIoLiNaPd0DNK6kKYsbvr5Z5Eq7TF3SIO77Qh9
/8VgUfOb0ARDgix59Q6MM0NmIabEwh0cDWQYlGgDDtN9DNk5PGM4pjs48suwEdLmFTMOmGTkCp7I
Vq6iHDNinBiB6+BB4VYMAO1o9qS+0pnfdmPJybt0zVGrhm/c1Fmm3Jec7NEuiKeXmhPIwdwMkKyp
AsX0sHuFCYwioBTHHZpvnir+H2rRakgxggHrMIIB5wIBATBVMEcxGDAWBgNVBAMTD1JhbmRhbGwg
U3Rld2FydDEeMBwGCSqGSIb3DQEJARYPcnJzQG5ldGZsaXguY29tMQswCQYDVQQGEwJVUwIKscsC
qqxzwdsm0zANBglghkgBZQMEAgEFAKBpMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZI
hvcNAQkFMQ8XDTIyMTAwNDExMTI0N1owLwYJKoZIhvcNAQkEMSIEIOR9Xq0Gp/1l+/ZWDQSgltZ0
RS1v87SihMrisUa59PmlMA0GCSqGSIb3DQEBCwUABIIBAGbRtQmlzC94YDqCXha1YWZEBmStT0M3
fNV5wpf6cOJn7ElrwjquiuWUQwhAHtL5NlJhZZJvNktCjxcca9PTeuq4hHWZj7Cal2LiVAvl0AyB
twNgY/s61jvjYC0hkSOvkb5OpCOja4Dd3B8sGfZDGnOVGL/LiSNnURlofyAZAM8lGEwv3xnwWN+M
RfpopcjQj4oZVPe0+h9jo4kZa8Z+MP6sUS+c4xopo3vxRLtVA60RB9Zu48ovhL4ZIPfUGwwG3s5k
6HjGT3ANv3evgpLusv+EtzBOidIpocrUpZt0a7pkibQ5lxqWy6lUZ4T5CnXD7FHeu0jkC2/Zup+T
5A+HbJoAAAAAAAA=
--Apple-Mail=_98AE2EC2-43A2-4380-8D04-F61A7835F5FE--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?1B7EBA3D-9673-4E13-9F06-C295EA0FFA40>