diff options
author | dlg <dlg@openbsd.org> | 2021-02-27 01:19:11 +0000 |
---|---|---|
committer | dlg <dlg@openbsd.org> | 2021-02-27 01:19:11 +0000 |
commit | 3a29f493ac2324889b068aa1fd8deafcc7820d4e (patch) | |
tree | 6977145d34055f214bcb7940497d0181d03bda16 /sys/net/if_aggr.c | |
parent | Check session, window, pane in the right order when working out format type. (diff) | |
download | wireguard-openbsd-3a29f493ac2324889b068aa1fd8deafcc7820d4e.tar.xz wireguard-openbsd-3a29f493ac2324889b068aa1fd8deafcc7820d4e.zip |
put the mac addr into a uint64_t to compare it to the ethernet slow addr.
also do the ethertype comparison before the conversion above.
Diffstat (limited to 'sys/net/if_aggr.c')
-rw-r--r-- | sys/net/if_aggr.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/sys/net/if_aggr.c b/sys/net/if_aggr.c index 87ed5ed2960..1e24e2537ea 100644 --- a/sys/net/if_aggr.c +++ b/sys/net/if_aggr.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_aggr.c,v 1.36 2021/01/19 07:29:42 mvs Exp $ */ +/* $OpenBSD: if_aggr.c,v 1.37 2021/02/27 01:19:11 dlg Exp $ */ /* * Copyright (c) 2019 The University of Queensland @@ -108,6 +108,7 @@ struct ether_slowproto_hdr { #define LACP_ADDR_C_BRIDGE { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x00 } #define LACP_ADDR_SLOW { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x02 } +#define LACP_ADDR_SLOW_E64 0x0180c2000002 #define LACP_ADDR_NON_TPMR_BRIDGE { 0x01, 0x80, 0xc2, 0x00, 0x00, 0x03 } struct lacp_tlv_hdr { @@ -505,8 +506,6 @@ static void aggr_unselected(struct aggr_port *); static void aggr_selection_logic(struct aggr_softc *, struct aggr_port *); -#define ETHER_IS_SLOWADDR(_a) ETHER_IS_EQ((_a), lacp_address_slow) - static struct if_clone aggr_cloner = IF_CLONE_INITIALIZER("aggr", aggr_clone_create, aggr_clone_destroy); @@ -719,8 +718,13 @@ aggr_start(struct ifqueue *ifq) static inline int aggr_eh_is_slow(const struct ether_header *eh) { - return (ETHER_IS_SLOWADDR(eh->ether_dhost) && - eh->ether_type == htons(ETHERTYPE_SLOW)); + uint64_t dst; + + if (eh->ether_type != htons(ETHERTYPE_SLOW)) + return (0); + + dst = ether_addr_to_e64((struct ether_addr *)eh->ether_dhost); + return (dst == LACP_ADDR_SLOW_E64); } static void |