diff options
-rw-r--r-- | sys/net/if.h | 4 | ||||
-rw-r--r-- | sys/net/if_gre.c | 16 |
2 files changed, 13 insertions, 7 deletions
diff --git a/sys/net/if.h b/sys/net/if.h index 4f2e9f7bd7a..0d28a126605 100644 --- a/sys/net/if.h +++ b/sys/net/if.h @@ -1,4 +1,4 @@ -/* $OpenBSD: if.h,v 1.195 2018/09/12 09:20:34 krw Exp $ */ +/* $OpenBSD: if.h,v 1.196 2018/11/11 05:55:10 dlg Exp $ */ /* $NetBSD: if.h,v 1.23 1996/05/07 02:40:27 thorpej Exp $ */ /* @@ -129,6 +129,8 @@ struct if_data { #define IFQ_MINPRIO 0 #define IFQ_MAXPRIO IFQ_NQUEUES - 1 #define IFQ_DEFPRIO 3 +#define IFQ_PRIO2TOS(_p) ((_p) << 5) +#define IFQ_TOS2PRIO(_t) ((_t) >> 5) /* * Values for if_link_state. diff --git a/sys/net/if_gre.c b/sys/net/if_gre.c index 30e63eab8e7..0fa59041cbf 100644 --- a/sys/net/if_gre.c +++ b/sys/net/if_gre.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_gre.c,v 1.131 2018/10/25 01:05:19 dlg Exp $ */ +/* $OpenBSD: if_gre.c,v 1.132 2018/11/11 05:55:10 dlg Exp $ */ /* $NetBSD: if_gre.c,v 1.9 1999/10/25 19:18:11 drochner Exp $ */ /* @@ -589,6 +589,8 @@ gre_clone_create(struct if_clone *ifc, int unit) bpfattach(&ifp->if_bpf, ifp, DLT_LOOP, sizeof(uint32_t)); #endif + ifp->if_llprio = IFQ_TOS2PRIO(IPTOS_PREC_INTERNETCONTROL); + NET_LOCK(); TAILQ_INSERT_TAIL(&gre_list, sc, sc_entry); NET_UNLOCK(); @@ -2817,6 +2819,7 @@ gre_keepalive_send(void *arg) int linkhdr, len; uint16_t proto; uint8_t ttl; + uint8_t tos; /* * re-schedule immediately, so we deal with incomplete configuation @@ -2869,6 +2872,7 @@ gre_keepalive_send(void *arg) SipHash24_Final(gk->gk_digest, &ctx); ttl = sc->sc_tunnel.t_ttl == -1 ? ip_defttl : sc->sc_tunnel.t_ttl; + tos = IFQ_PRIO2TOS(sc->sc_if.if_llprio); t.t_af = sc->sc_tunnel.t_af; t.t_df = sc->sc_tunnel.t_df; @@ -2877,7 +2881,7 @@ gre_keepalive_send(void *arg) t.t_key = sc->sc_tunnel.t_key; t.t_key_mask = sc->sc_tunnel.t_key_mask; - m = gre_encap(&t, m, htons(0), ttl, IPTOS_PREC_INTERNETCONTROL); + m = gre_encap(&t, m, htons(0), ttl, tos); if (m == NULL) return; @@ -2906,8 +2910,7 @@ gre_keepalive_send(void *arg) /* * put it in the tunnel */ - m = gre_encap(&sc->sc_tunnel, m, proto, ttl, - IPTOS_PREC_INTERNETCONTROL); + m = gre_encap(&sc->sc_tunnel, m, proto, ttl, tos); if (m == NULL) return; @@ -3751,10 +3754,11 @@ static void eoip_keepalive_send(void *arg) { struct eoip_softc *sc = arg; + struct ifnet *ifp = &sc->sc_ac.ac_if; struct mbuf *m; int linkhdr; - if (!ISSET(sc->sc_ac.ac_if.if_flags, IFF_RUNNING)) + if (!ISSET(ifp->if_flags, IFF_RUNNING)) return; /* this is really conservative */ @@ -3780,7 +3784,7 @@ eoip_keepalive_send(void *arg) m->m_pkthdr.len = m->m_len = linkhdr; m_adj(m, linkhdr); - m = eoip_encap(sc, m, IPTOS_PREC_INTERNETCONTROL); + m = eoip_encap(sc, m, IFQ_PRIO2TOS(ifp->if_llprio)); if (m == NULL) return; |