diff options
| -rw-r--r-- | flow.c | 2 | ||||
| -rw-r--r-- | flow.h | 2 | ||||
| -rw-r--r-- | util.h | 2 |
3 files changed, 6 insertions, 0 deletions
@@ -449,6 +449,7 @@ struct flowside *flow_target(const struct ctx *c, union flow *flow, switch (f->pif[INISIDE]) { case PIF_TAP: + memcpy(f->tap_omac, MAC_UNDEF, ETH_ALEN); tgtpif = fwd_nat_from_tap(c, proto, ini, tgt); break; @@ -458,6 +459,7 @@ struct flowside *flow_target(const struct ctx *c, union flow *flow, case PIF_HOST: tgtpif = fwd_nat_from_host(c, proto, ini, tgt); + fwd_neigh_mac_get(c, &tgt->oaddr, f->tap_omac); break; default: @@ -177,6 +177,7 @@ int flowside_connect(const struct ctx *c, int s, * @type: Type of packet flow * @pif[]: Interface for each side of the flow * @side[]: Information for each side of the flow + * @tap_omac: MAC address of remote endpoint as seen from the guest */ struct flow_common { #ifdef __GNUC__ @@ -192,6 +193,7 @@ struct flow_common { #endif uint8_t pif[SIDES]; struct flowside side[SIDES]; + uint8_t tap_omac[6]; }; #define FLOW_INDEX_BITS 17 /* 128k - 1 */ @@ -101,6 +101,8 @@ void abort_with_msg(const char *fmt, ...) ((uint8_t [ETH_ALEN]){ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff }) #define MAC_ZERO ((uint8_t [ETH_ALEN]){ 0 }) #define MAC_IS_ZERO(addr) (!memcmp((addr), MAC_ZERO, ETH_ALEN)) +#define MAC_UNDEF MAC_BROADCAST +#define MAC_IS_UNDEF(addr) (!memcmp((addr), MAC_UNDEF, ETH_ALEN)) #ifndef __bswap_constant_16 #define __bswap_constant_16(x) \ |
