[PATCH] Re: changing the ToS in IP Header

From: Terry Lambert (tlambert2_at_mindspring.com)
Date: 05/27/03

  • Next message: Kenjiro Cho: "Re: changing the ToS in IP Header"
    Date: Mon, 26 May 2003 18:10:13 -0700
    To: ashish@symonds.net
    
    
    

    Ashish Kulkarni wrote:
    > as I mentioned earlier, I want to do it for all outgoing packets on an
    > interface, not on per socket basis. I actually was hoping that somene
    > would provide me pointers to where I should look in the source (me being a
    > newcomer to BSD as such) to implement a sysctl that will allow me to
    > change the tos, eg. "net.inet.ip.tos". I'd have prefered to use a packet
    > mangling firewall, but afaik there are none which do that so I'll have to
    > do it the hard way ;-)

    The attached patch adds a new sysctl oid for support of a
    "net.inet.ip.default_tos" (default: 0).

    I sent it as a context diff, in case the kernel has changed
    more than a little since the last time I updated.

    Note: I only compile-tested this.

    -- Terry

    
    

    Index: in_pcb.c
    ===================================================================
    RCS file: /cvs/src/sys/netinet/in_pcb.c,v
    retrieving revision 1.120
    diff -c -r1.120 in_pcb.c
    *** in_pcb.c 21 Feb 2003 05:28:27 -0000 1.120
    --- in_pcb.c 26 May 2003 20:56:30 -0000
    ***************
    *** 31,37 ****
       * SUCH DAMAGE.
       *
       * @(#)in_pcb.c 8.4 (Berkeley) 5/24/95
    ! * $FreeBSD: src/sys/netinet/in_pcb.c,v 1.120 2003/02/21 05:28:27 cjc Exp $
       */
      
      #include "opt_ipsec.h"
    --- 31,37 ----
       * SUCH DAMAGE.
       *
       * @(#)in_pcb.c 8.4 (Berkeley) 5/24/95
    ! * $FreeBSD$
       */
      
      #include "opt_ipsec.h"
    ***************
    *** 104,109 ****
    --- 104,114 ----
      int ipport_reservedhigh = IPPORT_RESERVED - 1; /* 1023 */
      int ipport_reservedlow = 0;
      
    + /*
    + * Default type of service for all IP packets.
    + */
    + int ip_default_tos = 0;
    +
      #define RANGECHK(var, min, max) \
              if ((var) < (min)) { (var) = (min); } \
              else if ((var) > (max)) { (var) = (max); }
    ***************
    *** 124,129 ****
    --- 129,145 ----
              return error;
      }
      
    + static int
    + sysctl_net_iptos_check(SYSCTL_HANDLER_ARGS)
    + {
    + int error = sysctl_handle_int(oidp,
    + oidp->oid_arg1, oidp->oid_arg2, req);
    + if (!error) {
    + RANGECHK(ip_default_tos, 0, 255);
    + }
    + return error;
    + }
    +
      #undef RANGECHK
      
      SYSCTL_NODE(_net_inet_ip, IPPROTO_IP, portrange, CTLFLAG_RW, 0, "IP Ports");
    ***************
    *** 144,149 ****
    --- 160,167 ----
                 CTLFLAG_RW|CTLFLAG_SECURE, &ipport_reservedhigh, 0, "");
      SYSCTL_INT(_net_inet_ip_portrange, OID_AUTO, reservedlow,
                 CTLFLAG_RW|CTLFLAG_SECURE, &ipport_reservedlow, 0, "");
    + SYSCTL_PROC(_net_inet_ip, OID_AUTO, default_tos, CTLTYPE_INT|CTLFLAG_RW,
    + &ip_default_tos, 0, &sysctl_net_iptos_check, "I", "");
      
      /*
       * in_pcb.c: manage the Protocol Control Blocks.
    ***************
    *** 174,179 ****
    --- 192,198 ----
              inp->inp_gencnt = ++pcbinfo->ipi_gencnt;
              inp->inp_pcbinfo = pcbinfo;
              inp->inp_socket = so;
    + inp->inp_ip_tos = (u_char)ip_default_tos;
      #ifdef IPSEC
              error = ipsec_init_policy(so, &inp->inp_sp);
              if (error != 0) {

    
    

    _______________________________________________
    freebsd-hackers@freebsd.org mailing list
    http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
    To unsubscribe, send any mail to "freebsd-hackers-unsubscribe@freebsd.org"


  • Next message: Kenjiro Cho: "Re: changing the ToS in IP Header"