u8 hw_addr[6];
vnet_sw_interface_t *sw;
vnet_main_t *vnm = vnet_get_main ();
- vnet_hw_if_caps_t caps = VNET_HW_IF_CAP_INT_MODE;
+ vnet_hw_if_caps_t caps =
+ VNET_HW_IF_CAP_INT_MODE | VNET_HW_IF_CAP_TX_FIXED_OFFSET;
uword *p;
uword if_index;
u8 *host_if_name_dup = 0;
for (q = 0; q < vec_len (vui->vrings); q++)
vhost_user_vring_init (vui, q);
- vnet_hw_if_set_caps (vnm, vui->hw_if_index, VNET_HW_IF_CAP_INT_MODE);
+ vnet_hw_if_set_caps (vnm, vui->hw_if_index,
+ VNET_HW_IF_CAP_INT_MODE |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET);
vnet_hw_interface_set_flags (vnm, vui->hw_if_index, 0);
if (sw_if_index)
args->sw_if_index = sw->sw_if_index;
cc.mask = VNET_HW_IF_CAP_INT_MODE | VNET_HW_IF_CAP_TCP_GSO |
- VNET_HW_IF_CAP_TX_TCP_CKSUM | VNET_HW_IF_CAP_TX_UDP_CKSUM;
+ VNET_HW_IF_CAP_TX_TCP_CKSUM | VNET_HW_IF_CAP_TX_UDP_CKSUM |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET;
if (vd->gso_enable)
cc.val = cc.mask;
else
- cc.val = VNET_HW_IF_CAP_INT_MODE;
+ cc.val = VNET_HW_IF_CAP_INT_MODE | VNET_HW_IF_CAP_TX_FIXED_OFFSET;
vnet_hw_if_change_caps (vnm, vd->hw_if_index, &cc);
args->rv = 0;
hw = vnet_get_hw_interface (vnm, vif->hw_if_index);
cc.mask = VNET_HW_IF_CAP_INT_MODE | VNET_HW_IF_CAP_TCP_GSO |
- VNET_HW_IF_CAP_TX_TCP_CKSUM | VNET_HW_IF_CAP_TX_UDP_CKSUM;
- cc.val = VNET_HW_IF_CAP_INT_MODE;
+ VNET_HW_IF_CAP_TX_TCP_CKSUM | VNET_HW_IF_CAP_TX_UDP_CKSUM |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET;
+ cc.val = VNET_HW_IF_CAP_INT_MODE | VNET_HW_IF_CAP_TX_FIXED_OFFSET;
if (args->tap_flags & TAP_FLAG_GSO)
cc.val |= VNET_HW_IF_CAP_TCP_GSO | VNET_HW_IF_CAP_TX_TCP_CKSUM |
{
vif->gso_enabled = 1;
vif->csum_offload_enabled = 1;
- cc.val = cc.mask = VNET_HW_IF_CAP_TCP_GSO |
- VNET_HW_IF_CAP_TX_TCP_CKSUM |
- VNET_HW_IF_CAP_TX_UDP_CKSUM;
+ cc.val = cc.mask =
+ VNET_HW_IF_CAP_TCP_GSO | VNET_HW_IF_CAP_TX_TCP_CKSUM |
+ VNET_HW_IF_CAP_TX_UDP_CKSUM | VNET_HW_IF_CAP_TX_FIXED_OFFSET;
}
}
else if (csum_offload_enabled
{
vif->csum_offload_enabled = 1;
vif->gso_enabled = 0;
- cc.val =
- VNET_HW_IF_CAP_TX_TCP_CKSUM | VNET_HW_IF_CAP_TX_UDP_CKSUM;
+ cc.val = VNET_HW_IF_CAP_TX_TCP_CKSUM |
+ VNET_HW_IF_CAP_TX_UDP_CKSUM |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET;
cc.mask = VNET_HW_IF_CAP_TCP_GSO | VNET_HW_IF_CAP_TX_TCP_CKSUM |
- VNET_HW_IF_CAP_TX_UDP_CKSUM;
+ VNET_HW_IF_CAP_TX_UDP_CKSUM |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET;
}
}
else
vif->csum_offload_enabled = 0;
vif->gso_enabled = 0;
cc.val = 0;
- cc.mask = VNET_HW_IF_CAP_L4_TX_CKSUM | VNET_HW_IF_CAP_TCP_GSO;
+ cc.mask = VNET_HW_IF_CAP_L4_TX_CKSUM | VNET_HW_IF_CAP_TCP_GSO |
+ VNET_HW_IF_CAP_TX_FIXED_OFFSET;
}
}
}
_ (16, UDP_TNL_GSO, "udp-tnl-gso") \
_ (17, IP_TNL_GSO, "ip-tnl-gso") \
_ (18, TCP_LRO, "tcp-lro") \
+ _ (19, TX_FIXED_OFFSET, "fixed-offset") /* virtual interfaces */ \
_ (30, INT_MODE, "int-mode") \
_ (31, MAC_FILTER, "mac-filter")