Author: tuexen
Date: Sun Dec  1 18:47:53 2019
New Revision: 355267
URL: https://svnweb.freebsd.org/changeset/base/355267

Log:
  Make the IPTOS value available to all substate handlers. This will allow
  to add support for L4S or SCE, which require processing of the IP TOS
  field.
  
  Submitted by:         Richard Scheffenegger
  Reviewed by:          rgrimes@, rrs@, tuexen@
  Differential Revision:        https://reviews.freebsd.org/D22426

Modified:
  head/sys/netinet/tcp_stacks/rack.c
  head/sys/netinet/tcp_stacks/tcp_rack.h

Modified: head/sys/netinet/tcp_stacks/rack.c
==============================================================================
--- head/sys/netinet/tcp_stacks/rack.c  Sun Dec  1 18:05:02 2019        
(r355266)
+++ head/sys/netinet/tcp_stacks/rack.c  Sun Dec  1 18:47:53 2019        
(r355267)
@@ -390,39 +390,39 @@ static int32_t tcp_addrack(module_t mod, int32_t type,
 static int
 rack_do_close_wait(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_closing(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_established(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_fastnewdata(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t nxt_pkt, uint8_t iptos);
 static int
 rack_do_fin_wait_1(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_fin_wait_2(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_lastack(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_syn_recv(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 static int
 rack_do_syn_sent(struct mbuf *m, struct tcphdr *th,
     struct socket *so, struct tcpcb *tp, struct tcpopt *to, int32_t 
drop_hdrlen,
-    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt);
+    int32_t tlen, uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t 
iptos);
 struct rack_sendmap *
 tcp_rack_output(struct tcpcb *tp, struct tcp_rack *rack,
     uint32_t tsused);
@@ -5898,7 +5898,7 @@ dodata:                           /* XXX */
 static int
 rack_do_fastnewdata(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t nsegs;
        int32_t newsize = 0;    /* automatic sockbuf scaling */
@@ -6039,7 +6039,7 @@ rack_do_fastnewdata(struct mbuf *m, struct tcphdr *th,
 static int
 rack_fastack(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t nxt_pkt, uint32_t cts)
+    uint32_t tiwin, int32_t nxt_pkt, uint32_t cts, uint8_t iptos)
 {
        int32_t acked;
        int32_t nsegs;
@@ -6225,7 +6225,7 @@ rack_fastack(struct mbuf *m, struct tcphdr *th, struct
 static int
 rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t tos)
 {
        int32_t ret_val = 0;
        int32_t todrop;
@@ -6428,7 +6428,7 @@ rack_do_syn_sent(struct mbuf *m, struct tcphdr *th, st
 static int
 rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        struct tcp_rack *rack;
        int32_t ret_val = 0;
@@ -6624,7 +6624,7 @@ rack_do_syn_recv(struct mbuf *m, struct tcphdr *th, st
 static int
 rack_do_established(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
 
@@ -6651,12 +6651,12 @@ rack_do_established(struct mbuf *m, struct tcphdr *th,
                rack = (struct tcp_rack *)tp->t_fb_ptr;
                if (tlen == 0) {
                        if (rack_fastack(m, th, so, tp, to, drop_hdrlen, tlen,
-                           tiwin, nxt_pkt, rack->r_ctl.rc_rcvtime)) {
+                           tiwin, nxt_pkt, rack->r_ctl.rc_rcvtime, iptos)) {
                                return (0);
                        }
                } else {
                        if (rack_do_fastnewdata(m, th, so, tp, to, drop_hdrlen, 
tlen,
-                           tiwin, nxt_pkt)) {
+                           tiwin, nxt_pkt, iptos)) {
                                return (0);
                        }
                }
@@ -6754,7 +6754,7 @@ rack_do_established(struct mbuf *m, struct tcphdr *th,
 static int
 rack_do_close_wait(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
 
@@ -6871,7 +6871,7 @@ rack_check_data_after_close(struct mbuf *m, 
 static int
 rack_do_fin_wait_1(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
        int32_t ourfinisacked = 0;
@@ -6992,7 +6992,7 @@ rack_do_fin_wait_1(struct mbuf *m, struct tcphdr *th, 
 static int
 rack_do_closing(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
        int32_t ourfinisacked = 0;
@@ -7099,7 +7099,7 @@ rack_do_closing(struct mbuf *m, struct tcphdr *th, str
 static int
 rack_do_lastack(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
        int32_t ourfinisacked = 0;
@@ -7207,7 +7207,7 @@ rack_do_lastack(struct mbuf *m, struct tcphdr *th, str
 static int
 rack_do_fin_wait_2(struct mbuf *m, struct tcphdr *th, struct socket *so,
     struct tcpcb *tp, struct tcpopt *to, int32_t drop_hdrlen, int32_t tlen,
-    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt)
+    uint32_t tiwin, int32_t thflags, int32_t nxt_pkt, uint8_t iptos)
 {
        int32_t ret_val = 0;
        int32_t ourfinisacked = 0;
@@ -7837,7 +7837,7 @@ rack_do_segment_nounlock(struct mbuf *m, struct tcphdr
        rack_clear_rate_sample(rack);
        retval = (*rack->r_substate) (m, th, so,
            tp, &to, drop_hdrlen,
-           tlen, tiwin, thflags, nxt_pkt);
+           tlen, tiwin, thflags, nxt_pkt, iptos);
 #ifdef INVARIANTS
        if ((retval == 0) &&
            (tp->t_inpcb == NULL)) {

Modified: head/sys/netinet/tcp_stacks/tcp_rack.h
==============================================================================
--- head/sys/netinet/tcp_stacks/tcp_rack.h      Sun Dec  1 18:05:02 2019        
(r355266)
+++ head/sys/netinet/tcp_stacks/tcp_rack.h      Sun Dec  1 18:47:53 2019        
(r355267)
@@ -300,7 +300,7 @@ struct tcp_rack {
        TAILQ_ENTRY(tcp_rack) r_hpts;   /* hptsi queue next Lock(b) */
        int32_t(*r_substate) (struct mbuf *, struct tcphdr *,
            struct socket *, struct tcpcb *, struct tcpopt *,
-           int32_t, int32_t, uint32_t, int, int);      /* Lock(a) */
+           int32_t, int32_t, uint32_t, int, int, uint8_t);     /* Lock(a) */
        struct tcpcb *rc_tp;    /* The tcpcb Lock(a) */
        struct inpcb *rc_inp;   /* The inpcb Lock(a) */
        uint32_t rc_free_cnt;   /* Number of free entries on the rc_free list
_______________________________________________
svn-src-head@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to