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.


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:

-- 
jca | PGP : 0x1524E7EE / 5135 92C1 AD36 5293 2BDF  DDCC 0DFA 74AE 1524 E7EE

Reply via email to