Page MenuHomeFreeBSD

D29056.diff
No OneTemporary

D29056.diff

diff --git a/sys/net/altq/altq_subr.c b/sys/net/altq/altq_subr.c
--- a/sys/net/altq/altq_subr.c
+++ b/sys/net/altq/altq_subr.c
@@ -1087,7 +1087,7 @@
fin6->fi6_family = AF_INET6;
fin6->fi6_proto = ip6->ip6_nxt;
- fin6->fi6_tclass = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ fin6->fi6_tclass = IPV6_TRAFFIC_CLASS(ip6);
fin6->fi6_flowlabel = ip6->ip6_flow & htonl(0x000fffff);
fin6->fi6_src = ip6->ip6_src;
diff --git a/sys/net/if_stf.c b/sys/net/if_stf.c
--- a/sys/net/if_stf.c
+++ b/sys/net/if_stf.c
@@ -455,7 +455,7 @@
}
}
ip6 = mtod(m, struct ip6_hdr *);
- tos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ tos = IPV6_TRAFFIC_CLASS(ip6);
/*
* Pickup the right outer dst addr from the list of candidates.
@@ -665,7 +665,7 @@
return (IPPROTO_DONE);
}
- itos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ itos = IPV6_TRAFFIC_CLASS(ip6);
if ((ifp->if_flags & IFF_LINK1) != 0)
ip_ecn_egress(ECN_ALLOWED, &otos, &itos);
else
diff --git a/sys/netinet/ip6.h b/sys/netinet/ip6.h
--- a/sys/netinet/ip6.h
+++ b/sys/netinet/ip6.h
@@ -106,6 +106,10 @@
#endif
#define IPV6_FLOWLABEL_LEN 20
+#define IPV6_TRAFFIC_CLASS(ip6) ((ntohl((ip6)->ip6_flow) >> 20) & 0xff)
+#define IPV6_DSCP(ip6) ((ntohl((ip6)->ip6_flow) >> 20) & 0xfc)
+#define IPV6_ECN(ip6) ((ntohl((ip6)->ip6_flow) >> 20) & 0x03)
+
/*
* Extension Headers
*/
diff --git a/sys/netinet/tcp_input.c b/sys/netinet/tcp_input.c
--- a/sys/netinet/tcp_input.c
+++ b/sys/netinet/tcp_input.c
@@ -688,7 +688,7 @@
/* XXX stat */
goto drop;
}
- iptos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ iptos = IPV6_TRAFFIC_CLASS(ip6);
}
#endif
#if defined(INET) && defined(INET6)
diff --git a/sys/netinet/tcp_lro.c b/sys/netinet/tcp_lro.c
--- a/sys/netinet/tcp_lro.c
+++ b/sys/netinet/tcp_lro.c
@@ -1546,7 +1546,7 @@
return (error);
tcp_data_len = ntohs(ip6->ip6_plen);
#ifdef TCPHPTS
- iptos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ iptos = IPV6_TRAFFIC_CLASS(ip6);
#endif
ip_len = sizeof(*ip6) + tcp_data_len;
break;
diff --git a/sys/netinet/tcp_stacks/rack_bbr_common.c b/sys/netinet/tcp_stacks/rack_bbr_common.c
--- a/sys/netinet/tcp_stacks/rack_bbr_common.c
+++ b/sys/netinet/tcp_stacks/rack_bbr_common.c
@@ -334,7 +334,7 @@
m_freem(m);
goto skipped_pkt;
}
- iptos = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ iptos = IPV6_TRAFFIC_CLASS(ip6);
break;
}
#endif
diff --git a/sys/netinet6/frag6.c b/sys/netinet6/frag6.c
--- a/sys/netinet6/frag6.c
+++ b/sys/netinet6/frag6.c
@@ -554,8 +554,7 @@
q6->ip6q_ttl = IPV6_FRAGTTL;
q6->ip6q_src = ip6->ip6_src;
q6->ip6q_dst = ip6->ip6_dst;
- q6->ip6q_ecn =
- (ntohl(ip6->ip6_flow) >> 20) & IPTOS_ECN_MASK;
+ q6->ip6q_ecn = IPV6_ECN(ip6);
q6->ip6q_unfrglen = -1; /* The 1st fragment has not arrived. */
/* Add the fragemented packet to the bucket. */
@@ -688,7 +687,7 @@
* if CE is set, do not lose CE.
* Drop if CE and not-ECT are mixed for the same packet.
*/
- ecn = (ntohl(ip6->ip6_flow) >> 20) & IPTOS_ECN_MASK;
+ ecn = IPV6_ECN(ip6);
ecn0 = q6->ip6q_ecn;
if (ecn == IPTOS_ECN_CE) {
if (ecn0 == IPTOS_ECN_NOTECT) {
diff --git a/sys/netinet6/in6_gif.c b/sys/netinet6/in6_gif.c
--- a/sys/netinet6/in6_gif.c
+++ b/sys/netinet6/in6_gif.c
@@ -344,7 +344,7 @@
gifp = GIF2IFP(sc);
if ((gifp->if_flags & IFF_UP) != 0) {
ip6 = mtod(m, struct ip6_hdr *);
- ecn = (ntohl(ip6->ip6_flow) >> 20) & 0xff;
+ ecn = IPV6_TRAFFIC_CLASS(ip6);
m_adj(m, off);
gif_input(m, gifp, proto, ecn);
} else {
diff --git a/sys/netinet6/ip6_output.c b/sys/netinet6/ip6_output.c
--- a/sys/netinet6/ip6_output.c
+++ b/sys/netinet6/ip6_output.c
@@ -656,9 +656,9 @@
if (opt && opt->ip6po_tclass >= 0) {
int mask = 0;
- if ((ip6->ip6_flow & htonl(0xfc << 20)) == 0)
+ if (IPV6_DSCP(ip6) == 0)
mask |= 0xfc;
- if ((ip6->ip6_flow & htonl(0x03 << 20)) == 0)
+ if (IPV6_ECN(ip6) == 0)
mask |= 0x03;
if (mask != 0)
ip6->ip6_flow |= htonl((opt->ip6po_tclass & mask) << 20);
diff --git a/sys/netinet6/sctp6_usrreq.c b/sys/netinet6/sctp6_usrreq.c
--- a/sys/netinet6/sctp6_usrreq.c
+++ b/sys/netinet6/sctp6_usrreq.c
@@ -141,7 +141,7 @@
if (IN6_IS_ADDR_MULTICAST(&ip6->ip6_dst)) {
goto out;
}
- ecn_bits = ((ntohl(ip6->ip6_flow) >> 20) & 0x000000ff);
+ ecn_bits = IPV6_TRAFFIC_CLASS(ip6);
if (m->m_pkthdr.csum_flags & CSUM_SCTP_VALID) {
SCTP_STAT_INCR(sctps_recvhwcrc);
compute_crc = 0;
diff --git a/sys/netpfil/pf/pf.c b/sys/netpfil/pf/pf.c
--- a/sys/netpfil/pf/pf.c
+++ b/sys/netpfil/pf/pf.c
@@ -6384,7 +6384,7 @@
pd.sidx = (dir == PF_IN) ? 0 : 1;
pd.didx = (dir == PF_IN) ? 1 : 0;
pd.af = AF_INET6;
- pd.tos = (ntohl(h->ip6_flow) >> 20) & 0xfc;
+ pd.tos = IPV6_DSCP(h);
pd.tot_len = ntohs(h->ip6_plen) + sizeof(struct ip6_hdr);
off = ((caddr_t)h - m->m_data) + sizeof(struct ip6_hdr);

File Metadata

Mime Type
text/plain
Expires
Tue, Sep 24, 6:07 PM (11 h, 38 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
12682417
Default Alt Text
D29056.diff (4 KB)

Event Timeline