On Tue, 13 Sep 2016 14:19:24 +0200
[email protected] (Jeremie Courreges-Anglas) wrote:
> Since it has been introduced, ip6_setpktopt has only been called with
> (sticky=1, cmsg=0) or (sticky=0, cmsg=1). Let's simplify this code.
Ok vgross@
>
>
> Index: ip6_output.c
> ===================================================================
> RCS file: /cvs/src/sys/netinet6/ip6_output.c,v
> retrieving revision 1.213
> diff -u -p -p -u -r1.213 ip6_output.c
> --- ip6_output.c 25 Aug 2016 12:30:16 -0000 1.213
> +++ ip6_output.c 13 Sep 2016 11:56:19 -0000
> @@ -119,8 +119,7 @@ struct ip6_exthdrs {
> int ip6_pcbopt(int, u_char *, int, struct ip6_pktopts **, int, int);
> int ip6_pcbopts(struct ip6_pktopts **, struct mbuf *, struct socket
> *); int ip6_getpcbopt(struct ip6_pktopts *, int, struct mbuf **);
> -int ip6_setpktopt(int, u_char *, int, struct ip6_pktopts *, int, int,
> - int, int);
> +int ip6_setpktopt(int, u_char *, int, struct ip6_pktopts *, int,
> int, int); int ip6_setmoptions(int, struct ip6_moptions **, struct
> mbuf *); int ip6_getmoptions(int, struct ip6_moptions *, struct mbuf
> **); int ip6_copyexthdr(struct mbuf **, caddr_t, int);
> @@ -1770,7 +1769,7 @@ ip6_pcbopt(int optname, u_char *buf, int
> }
> opt = *pktopt;
>
> - return (ip6_setpktopt(optname, buf, len, opt, priv, 1, 0,
> uproto));
> + return (ip6_setpktopt(optname, buf, len, opt, priv, 1,
> uproto)); }
>
> int
> @@ -2352,7 +2351,7 @@ ip6_setpktopts(struct mbuf *control, str
> return (EINVAL);
> if (cm->cmsg_level == IPPROTO_IPV6) {
> error = ip6_setpktopt(cm->cmsg_type,
> CMSG_DATA(cm),
> - cm->cmsg_len - CMSG_LEN(0), opt, priv,
> 0, 1, uproto);
> + cm->cmsg_len - CMSG_LEN(0), opt, priv,
> 0, uproto); if (error)
> return (error);
> }
> @@ -2367,39 +2366,12 @@ ip6_setpktopts(struct mbuf *control, str
> /*
> * Set a particular packet option, as a sticky option or an
> ancillary data
> * item. "len" can be 0 only when it's a sticky option.
> - * We have 4 cases of combination of "sticky" and "cmsg":
> - * "sticky=0, cmsg=0": impossible
> - * "sticky=0, cmsg=1": RFC2292 or RFC3542 ancillary data
> - * "sticky=1, cmsg=0": RFC3542 socket option
> - * "sticky=1, cmsg=1": RFC2292 socket option
> */
> int
> ip6_setpktopt(int optname, u_char *buf, int len, struct ip6_pktopts
> *opt,
> - int priv, int sticky, int cmsg, int uproto)
> + int priv, int sticky, int uproto)
> {
> int minmtupolicy;
> -
> - if (!sticky && !cmsg) {
> -#ifdef DIAGNOSTIC
> - printf("ip6_setpktopt: impossible case\n");
> -#endif
> - return (EINVAL);
> - }
> -
> - if (sticky && cmsg) {
> - switch (optname) {
> - case IPV6_PKTINFO:
> - case IPV6_HOPLIMIT:
> - case IPV6_HOPOPTS:
> - case IPV6_DSTOPTS:
> - case IPV6_RTHDRDSTOPTS:
> - case IPV6_RTHDR:
> - case IPV6_USE_MIN_MTU:
> - case IPV6_DONTFRAG:
> - case IPV6_TCLASS:
> - return (ENOPROTOOPT);
> - }
> - }
>
> switch (optname) {
> case IPV6_PKTINFO:
>