Skip to content

Commit

Permalink
ixgbe: Extend cls_u32 offload to support UDP headers
Browse files Browse the repository at this point in the history
Added support to match on UDP fields in the transport layer.
Extended core logic to support multiple headers.

Verified with the following filters :

	handle 1: u32 divisor 1
	u32 ht 800: order 1 link 1: \
	offset at 0 mask 0f00 shift 6 plus 0 eat match ip protocol 6 ff
	u32 ht 1: order 2 \
	match tcp src 1024 ffff match tcp dst 23 ffff action drop
	handle 2: u32 divisor 1
	u32 ht 800: order 3 link 2: \
	offset at 0 mask 0f00 shift 6 plus 0 eat match ip protocol 17 ff
	u32 ht 2: order 4 \
	match udp src 1025 ffff match udp dst 24 ffff action drop

Signed-off-by: Amritha Nambiar <amritha.nambiar@intel.com>
Acked-by: John Fastabend <john.r.fastabend@intel.com>
Acked-by: Sridhar Samudrala <sridhar.samudrala@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Amritha Nambiar authored and Jeff Kirsher committed Apr 5, 2016
1 parent dbd15b8 commit 4ae7834
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 9 deletions.
19 changes: 10 additions & 9 deletions drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -8257,19 +8257,20 @@ static int ixgbe_configure_clsu32(struct ixgbe_adapter *adapter,
return -EINVAL;

for (i = 0; nexthdr[i].jump; i++) {
if (nexthdr->o != cls->knode.sel->offoff ||
nexthdr->s != cls->knode.sel->offshift ||
nexthdr->m != cls->knode.sel->offmask ||
if (nexthdr[i].o != cls->knode.sel->offoff ||
nexthdr[i].s != cls->knode.sel->offshift ||
nexthdr[i].m != cls->knode.sel->offmask ||
/* do not support multiple key jumps its just mad */
cls->knode.sel->nkeys > 1)
return -EINVAL;

if (nexthdr->off != cls->knode.sel->keys[0].off ||
nexthdr->val != cls->knode.sel->keys[0].val ||
nexthdr->mask != cls->knode.sel->keys[0].mask)
return -EINVAL;

adapter->jump_tables[link_uhtid] = nexthdr->jump;
if (nexthdr[i].off == cls->knode.sel->keys[0].off &&
nexthdr[i].val == cls->knode.sel->keys[0].val &&
nexthdr[i].mask == cls->knode.sel->keys[0].mask) {
adapter->jump_tables[link_uhtid] =
nexthdr[i].jump;
break;
}
}
return 0;
}
Expand Down
8 changes: 8 additions & 0 deletions drivers/net/ethernet/intel/ixgbe/ixgbe_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,12 @@ static struct ixgbe_mat_field ixgbe_tcp_fields[] = {
{ .val = NULL } /* terminal node */
};

static struct ixgbe_mat_field ixgbe_udp_fields[] = {
{.off = 0, .val = ixgbe_mat_prgm_ports,
.type = IXGBE_ATR_FLOW_TYPE_UDPV4},
{ .val = NULL } /* terminal node */
};

struct ixgbe_nexthdr {
/* offset, shift, and mask of position to next header */
unsigned int o;
Expand All @@ -98,6 +104,8 @@ struct ixgbe_nexthdr {
static struct ixgbe_nexthdr ixgbe_ipv4_jumps[] = {
{ .o = 0, .s = 6, .m = 0xf,
.off = 8, .val = 0x600, .mask = 0xff00, .jump = ixgbe_tcp_fields},
{ .o = 0, .s = 6, .m = 0xf,
.off = 8, .val = 0x1100, .mask = 0xff00, .jump = ixgbe_udp_fields},
{ .jump = NULL } /* terminal node */
};
#endif /* _IXGBE_MODEL_H_ */

0 comments on commit 4ae7834

Please sign in to comment.