net/ice/base: support destination MAC field for FDIR
Add dest MAC address support so that this field can be matched when we set Flow Director filter with dst addr for MAC. Signed-off-by: Junfeng Guo <junfeng.guo@intel.com> Signed-off-by: Paul M Stillwell Jr <paul.m.stillwell.jr@intel.com> Signed-off-by: Qi Zhang <qi.z.zhang@intel.com> Acked-by: Qiming Yang <qiming.yang@intel.com>
This commit is contained in:
parent
70b14768e3
commit
bf8d075f73
@ -542,6 +542,17 @@ static void ice_pkt_insert_u32(u8 *pkt, int offset, __be32 data)
|
|||||||
ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
|
ice_memcpy(pkt + offset, &data, sizeof(data), ICE_NONDMA_TO_NONDMA);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* ice_pkt_insert_mac_addr - insert a MAC addr into a memory buffer.
|
||||||
|
* @pkt: packet buffer
|
||||||
|
* @offset: offset into buffer
|
||||||
|
* @addr: MAC address to convert and insert into pkt at offset
|
||||||
|
*/
|
||||||
|
static void ice_pkt_insert_mac_addr(u8 *pkt, u8 *addr)
|
||||||
|
{
|
||||||
|
ice_memcpy(pkt, addr, ETH_ALEN, ICE_NONDMA_TO_NONDMA);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ice_fdir_get_gen_prgm_pkt - generate a training packet
|
* ice_fdir_get_gen_prgm_pkt - generate a training packet
|
||||||
* @hw: pointer to the hardware structure
|
* @hw: pointer to the hardware structure
|
||||||
@ -626,6 +637,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v4.src_port);
|
input->ip.v4.src_port);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
if (frag)
|
if (frag)
|
||||||
loc[20] = ICE_FDIR_IPV4_PKT_FLAG_DF;
|
loc[20] = ICE_FDIR_IPV4_PKT_FLAG_DF;
|
||||||
break;
|
break;
|
||||||
@ -640,6 +652,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v4.src_port);
|
input->ip.v4.src_port);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
|
case ICE_FLTR_PTYPE_NONF_IPV4_SCTP:
|
||||||
ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
|
ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
|
||||||
@ -652,6 +665,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v4.src_port);
|
input->ip.v4.src_port);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TOS_OFFSET, input->ip.v4.tos);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
|
case ICE_FLTR_PTYPE_NONF_IPV4_OTHER:
|
||||||
ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
|
ice_pkt_insert_u32(loc, ICE_IPV4_DST_ADDR_OFFSET,
|
||||||
@ -662,6 +676,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
ice_pkt_insert_u8(loc, ICE_IPV4_TTL_OFFSET, input->ip.v4.ttl);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
|
ice_pkt_insert_u8(loc, ICE_IPV4_PROTO_OFFSET,
|
||||||
input->ip.v4.proto);
|
input->ip.v4.proto);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
|
case ICE_FLTR_PTYPE_NONF_IPV6_TCP:
|
||||||
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
||||||
@ -674,6 +689,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v6.src_port);
|
input->ip.v6.src_port);
|
||||||
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
|
case ICE_FLTR_PTYPE_NONF_IPV6_UDP:
|
||||||
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
||||||
@ -686,6 +702,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v6.src_port);
|
input->ip.v6.src_port);
|
||||||
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
|
case ICE_FLTR_PTYPE_NONF_IPV6_SCTP:
|
||||||
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
||||||
@ -698,6 +715,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
input->ip.v6.src_port);
|
input->ip.v6.src_port);
|
||||||
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
ice_pkt_insert_u8_tc(loc, ICE_IPV6_TC_OFFSET, input->ip.v6.tc);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
|
case ICE_FLTR_PTYPE_NONF_IPV6_OTHER:
|
||||||
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
ice_pkt_insert_ipv6_addr(loc, ICE_IPV6_DST_ADDR_OFFSET,
|
||||||
@ -708,6 +726,7 @@ ice_fdir_get_gen_prgm_pkt(struct ice_hw *hw, struct ice_fdir_fltr *input,
|
|||||||
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
ice_pkt_insert_u8(loc, ICE_IPV6_HLIM_OFFSET, input->ip.v6.hlim);
|
||||||
ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
|
ice_pkt_insert_u8(loc, ICE_IPV6_PROTO_OFFSET,
|
||||||
input->ip.v6.proto);
|
input->ip.v6.proto);
|
||||||
|
ice_pkt_insert_mac_addr(loc, input->ext_data.dst_mac);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
return ICE_ERR_PARAM;
|
return ICE_ERR_PARAM;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user