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:
> 

Reply via email to