net: mscc: ocelot: export VCAP structures to include/soc/mscc
authorVladimir Oltean <vladimir.oltean@nxp.com>
Fri, 29 Jan 2021 01:00:00 +0000 (03:00 +0200)
committerJakub Kicinski <kuba@kernel.org>
Sat, 30 Jan 2021 05:24:30 +0000 (21:24 -0800)
The Felix driver will need to preinstall some VCAP filters for its
tag_8021q implementation (outside of the tc-flower offload logic), so
these need to be exported to the common includes.

Signed-off-by: Vladimir Oltean <vladimir.oltean@nxp.com>
Reviewed-by: Florian Fainelli <f.fainelli@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/mscc/ocelot_net.c
drivers/net/ethernet/mscc/ocelot_vcap.c
drivers/net/ethernet/mscc/ocelot_vcap.h
include/soc/mscc/ocelot_vcap.h

index 9553eb3e441c91b9cc66e4b55c76bdc61239809b..05142803a4638cb248418d76b721c1a12a4f7232 100644 (file)
@@ -9,6 +9,7 @@
  */
 
 #include <linux/if_bridge.h>
+#include <net/pkt_cls.h>
 #include "ocelot.h"
 #include "ocelot_vcap.h"
 
index d8c778ee6f1b8d1046a9bada10ebcd7b243159ce..489bf16362a7e62564b6ca53174919a416a7bb64 100644 (file)
@@ -1150,6 +1150,7 @@ int ocelot_vcap_filter_add(struct ocelot *ocelot,
        vcap_entry_set(ocelot, index, filter);
        return 0;
 }
+EXPORT_SYMBOL(ocelot_vcap_filter_add);
 
 static void ocelot_vcap_block_remove_filter(struct ocelot *ocelot,
                                            struct ocelot_vcap_block *block,
@@ -1204,6 +1205,7 @@ int ocelot_vcap_filter_del(struct ocelot *ocelot,
 
        return 0;
 }
+EXPORT_SYMBOL(ocelot_vcap_filter_del);
 
 int ocelot_vcap_filter_stats_update(struct ocelot *ocelot,
                                    struct ocelot_vcap_filter *filter)
index 82fd10581a1494409d38b312ee4362e22a043ae4..cfc8b976d1deb241e93996234069b1f710fb16dc 100644 (file)
 #define _MSCC_OCELOT_VCAP_H_
 
 #include "ocelot.h"
-#include "ocelot_police.h"
-#include <net/sch_generic.h>
-#include <net/pkt_cls.h>
+#include <soc/mscc/ocelot_vcap.h>
+#include <net/flow_offload.h>
 
 #define OCELOT_POLICER_DISCARD 0x17f
 
-struct ocelot_ipv4 {
-       u8 addr[4];
-};
-
-enum ocelot_vcap_bit {
-       OCELOT_VCAP_BIT_ANY,
-       OCELOT_VCAP_BIT_0,
-       OCELOT_VCAP_BIT_1
-};
-
-struct ocelot_vcap_u8 {
-       u8 value[1];
-       u8 mask[1];
-};
-
-struct ocelot_vcap_u16 {
-       u8 value[2];
-       u8 mask[2];
-};
-
-struct ocelot_vcap_u24 {
-       u8 value[3];
-       u8 mask[3];
-};
-
-struct ocelot_vcap_u32 {
-       u8 value[4];
-       u8 mask[4];
-};
-
-struct ocelot_vcap_u40 {
-       u8 value[5];
-       u8 mask[5];
-};
-
-struct ocelot_vcap_u48 {
-       u8 value[6];
-       u8 mask[6];
-};
-
-struct ocelot_vcap_u64 {
-       u8 value[8];
-       u8 mask[8];
-};
-
-struct ocelot_vcap_u128 {
-       u8 value[16];
-       u8 mask[16];
-};
-
-struct ocelot_vcap_vid {
-       u16 value;
-       u16 mask;
-};
-
-struct ocelot_vcap_ipv4 {
-       struct ocelot_ipv4 value;
-       struct ocelot_ipv4 mask;
-};
-
-struct ocelot_vcap_udp_tcp {
-       u16 value;
-       u16 mask;
-};
-
-struct ocelot_vcap_port {
-       u8 value;
-       u8 mask;
-};
-
-enum ocelot_vcap_key_type {
-       OCELOT_VCAP_KEY_ANY,
-       OCELOT_VCAP_KEY_ETYPE,
-       OCELOT_VCAP_KEY_LLC,
-       OCELOT_VCAP_KEY_SNAP,
-       OCELOT_VCAP_KEY_ARP,
-       OCELOT_VCAP_KEY_IPV4,
-       OCELOT_VCAP_KEY_IPV6
-};
-
-struct ocelot_vcap_key_vlan {
-       struct ocelot_vcap_vid vid;    /* VLAN ID (12 bit) */
-       struct ocelot_vcap_u8  pcp;    /* PCP (3 bit) */
-       enum ocelot_vcap_bit dei;    /* DEI */
-       enum ocelot_vcap_bit tagged; /* Tagged/untagged frame */
-};
-
-struct ocelot_vcap_key_etype {
-       struct ocelot_vcap_u48 dmac;
-       struct ocelot_vcap_u48 smac;
-       struct ocelot_vcap_u16 etype;
-       struct ocelot_vcap_u16 data; /* MAC data */
-};
-
-struct ocelot_vcap_key_llc {
-       struct ocelot_vcap_u48 dmac;
-       struct ocelot_vcap_u48 smac;
-
-       /* LLC header: DSAP at byte 0, SSAP at byte 1, Control at byte 2 */
-       struct ocelot_vcap_u32 llc;
-};
-
-struct ocelot_vcap_key_snap {
-       struct ocelot_vcap_u48 dmac;
-       struct ocelot_vcap_u48 smac;
-
-       /* SNAP header: Organization Code at byte 0, Type at byte 3 */
-       struct ocelot_vcap_u40 snap;
-};
-
-struct ocelot_vcap_key_arp {
-       struct ocelot_vcap_u48 smac;
-       enum ocelot_vcap_bit arp;       /* Opcode ARP/RARP */
-       enum ocelot_vcap_bit req;       /* Opcode request/reply */
-       enum ocelot_vcap_bit unknown;    /* Opcode unknown */
-       enum ocelot_vcap_bit smac_match; /* Sender MAC matches SMAC */
-       enum ocelot_vcap_bit dmac_match; /* Target MAC matches DMAC */
-
-       /**< Protocol addr. length 4, hardware length 6 */
-       enum ocelot_vcap_bit length;
-
-       enum ocelot_vcap_bit ip;       /* Protocol address type IP */
-       enum  ocelot_vcap_bit ethernet; /* Hardware address type Ethernet */
-       struct ocelot_vcap_ipv4 sip;     /* Sender IP address */
-       struct ocelot_vcap_ipv4 dip;     /* Target IP address */
-};
-
-struct ocelot_vcap_key_ipv4 {
-       enum ocelot_vcap_bit ttl;      /* TTL zero */
-       enum ocelot_vcap_bit fragment; /* Fragment */
-       enum ocelot_vcap_bit options;  /* Header options */
-       struct ocelot_vcap_u8 ds;
-       struct ocelot_vcap_u8 proto;      /* Protocol */
-       struct ocelot_vcap_ipv4 sip;      /* Source IP address */
-       struct ocelot_vcap_ipv4 dip;      /* Destination IP address */
-       struct ocelot_vcap_u48 data;      /* Not UDP/TCP: IP data */
-       struct ocelot_vcap_udp_tcp sport; /* UDP/TCP: Source port */
-       struct ocelot_vcap_udp_tcp dport; /* UDP/TCP: Destination port */
-       enum ocelot_vcap_bit tcp_fin;
-       enum ocelot_vcap_bit tcp_syn;
-       enum ocelot_vcap_bit tcp_rst;
-       enum ocelot_vcap_bit tcp_psh;
-       enum ocelot_vcap_bit tcp_ack;
-       enum ocelot_vcap_bit tcp_urg;
-       enum ocelot_vcap_bit sip_eq_dip;     /* SIP equals DIP  */
-       enum ocelot_vcap_bit sport_eq_dport; /* SPORT equals DPORT  */
-       enum ocelot_vcap_bit seq_zero;       /* TCP sequence number is zero */
-};
-
-struct ocelot_vcap_key_ipv6 {
-       struct ocelot_vcap_u8 proto; /* IPv6 protocol */
-       struct ocelot_vcap_u128 sip; /* IPv6 source (byte 0-7 ignored) */
-       struct ocelot_vcap_u128 dip; /* IPv6 destination (byte 0-7 ignored) */
-       enum ocelot_vcap_bit ttl;  /* TTL zero */
-       struct ocelot_vcap_u8 ds;
-       struct ocelot_vcap_u48 data; /* Not UDP/TCP: IP data */
-       struct ocelot_vcap_udp_tcp sport;
-       struct ocelot_vcap_udp_tcp dport;
-       enum ocelot_vcap_bit tcp_fin;
-       enum ocelot_vcap_bit tcp_syn;
-       enum ocelot_vcap_bit tcp_rst;
-       enum ocelot_vcap_bit tcp_psh;
-       enum ocelot_vcap_bit tcp_ack;
-       enum ocelot_vcap_bit tcp_urg;
-       enum ocelot_vcap_bit sip_eq_dip;     /* SIP equals DIP  */
-       enum ocelot_vcap_bit sport_eq_dport; /* SPORT equals DPORT  */
-       enum ocelot_vcap_bit seq_zero;       /* TCP sequence number is zero */
-};
-
-enum ocelot_mask_mode {
-       OCELOT_MASK_MODE_NONE,
-       OCELOT_MASK_MODE_PERMIT_DENY,
-       OCELOT_MASK_MODE_POLICY,
-       OCELOT_MASK_MODE_REDIRECT,
-};
-
-enum ocelot_es0_tag {
-       OCELOT_NO_ES0_TAG,
-       OCELOT_ES0_TAG,
-       OCELOT_FORCE_PORT_TAG,
-       OCELOT_FORCE_UNTAG,
-};
-
-enum ocelot_tag_tpid_sel {
-       OCELOT_TAG_TPID_SEL_8021Q,
-       OCELOT_TAG_TPID_SEL_8021AD,
-};
-
-struct ocelot_vcap_action {
-       union {
-               /* VCAP ES0 */
-               struct {
-                       enum ocelot_es0_tag push_outer_tag;
-                       enum ocelot_es0_tag push_inner_tag;
-                       enum ocelot_tag_tpid_sel tag_a_tpid_sel;
-                       int tag_a_vid_sel;
-                       int tag_a_pcp_sel;
-                       u16 vid_a_val;
-                       u8 pcp_a_val;
-                       u8 dei_a_val;
-                       enum ocelot_tag_tpid_sel tag_b_tpid_sel;
-                       int tag_b_vid_sel;
-                       int tag_b_pcp_sel;
-                       u16 vid_b_val;
-                       u8 pcp_b_val;
-                       u8 dei_b_val;
-               };
-
-               /* VCAP IS1 */
-               struct {
-                       bool vid_replace_ena;
-                       u16 vid;
-                       bool vlan_pop_cnt_ena;
-                       int vlan_pop_cnt;
-                       bool pcp_dei_ena;
-                       u8 pcp;
-                       u8 dei;
-                       bool qos_ena;
-                       u8 qos_val;
-                       u8 pag_override_mask;
-                       u8 pag_val;
-               };
-
-               /* VCAP IS2 */
-               struct {
-                       bool cpu_copy_ena;
-                       u8 cpu_qu_num;
-                       enum ocelot_mask_mode mask_mode;
-                       unsigned long port_mask;
-                       bool police_ena;
-                       struct ocelot_policer pol;
-                       u32 pol_ix;
-               };
-       };
-};
-
-struct ocelot_vcap_stats {
-       u64 bytes;
-       u64 pkts;
-       u64 used;
-};
-
-enum ocelot_vcap_filter_type {
-       OCELOT_VCAP_FILTER_DUMMY,
-       OCELOT_VCAP_FILTER_PAG,
-       OCELOT_VCAP_FILTER_OFFLOAD,
-};
-
-struct ocelot_vcap_filter {
-       struct list_head list;
-
-       enum ocelot_vcap_filter_type type;
-       int block_id;
-       int goto_target;
-       int lookup;
-       u8 pag;
-       u16 prio;
-       u32 id;
-
-       struct ocelot_vcap_action action;
-       struct ocelot_vcap_stats stats;
-       /* For VCAP IS1 and IS2 */
-       unsigned long ingress_port_mask;
-       /* For VCAP ES0 */
-       struct ocelot_vcap_port ingress_port;
-       struct ocelot_vcap_port egress_port;
-
-       enum ocelot_vcap_bit dmac_mc;
-       enum ocelot_vcap_bit dmac_bc;
-       struct ocelot_vcap_key_vlan vlan;
-
-       enum ocelot_vcap_key_type key_type;
-       union {
-               /* OCELOT_VCAP_KEY_ANY: No specific fields */
-               struct ocelot_vcap_key_etype etype;
-               struct ocelot_vcap_key_llc llc;
-               struct ocelot_vcap_key_snap snap;
-               struct ocelot_vcap_key_arp arp;
-               struct ocelot_vcap_key_ipv4 ipv4;
-               struct ocelot_vcap_key_ipv6 ipv6;
-       } key;
-};
-
-int ocelot_vcap_filter_add(struct ocelot *ocelot,
-                          struct ocelot_vcap_filter *rule,
-                          struct netlink_ext_ack *extack);
-int ocelot_vcap_filter_del(struct ocelot *ocelot,
-                          struct ocelot_vcap_filter *rule);
 int ocelot_vcap_filter_stats_update(struct ocelot *ocelot,
                                    struct ocelot_vcap_filter *rule);
 struct ocelot_vcap_filter *
index 96300adf36481757c7954d6ae0bec7d420a187bd..7f1b82fba63c7f643fb49683bc7a7b958eca5bba 100644 (file)
@@ -400,4 +400,293 @@ enum vcap_es0_action_field {
        VCAP_ES0_ACT_HIT_STICKY,
 };
 
+struct ocelot_ipv4 {
+       u8 addr[4];
+};
+
+enum ocelot_vcap_bit {
+       OCELOT_VCAP_BIT_ANY,
+       OCELOT_VCAP_BIT_0,
+       OCELOT_VCAP_BIT_1
+};
+
+struct ocelot_vcap_u8 {
+       u8 value[1];
+       u8 mask[1];
+};
+
+struct ocelot_vcap_u16 {
+       u8 value[2];
+       u8 mask[2];
+};
+
+struct ocelot_vcap_u24 {
+       u8 value[3];
+       u8 mask[3];
+};
+
+struct ocelot_vcap_u32 {
+       u8 value[4];
+       u8 mask[4];
+};
+
+struct ocelot_vcap_u40 {
+       u8 value[5];
+       u8 mask[5];
+};
+
+struct ocelot_vcap_u48 {
+       u8 value[6];
+       u8 mask[6];
+};
+
+struct ocelot_vcap_u64 {
+       u8 value[8];
+       u8 mask[8];
+};
+
+struct ocelot_vcap_u128 {
+       u8 value[16];
+       u8 mask[16];
+};
+
+struct ocelot_vcap_vid {
+       u16 value;
+       u16 mask;
+};
+
+struct ocelot_vcap_ipv4 {
+       struct ocelot_ipv4 value;
+       struct ocelot_ipv4 mask;
+};
+
+struct ocelot_vcap_udp_tcp {
+       u16 value;
+       u16 mask;
+};
+
+struct ocelot_vcap_port {
+       u8 value;
+       u8 mask;
+};
+
+enum ocelot_vcap_key_type {
+       OCELOT_VCAP_KEY_ANY,
+       OCELOT_VCAP_KEY_ETYPE,
+       OCELOT_VCAP_KEY_LLC,
+       OCELOT_VCAP_KEY_SNAP,
+       OCELOT_VCAP_KEY_ARP,
+       OCELOT_VCAP_KEY_IPV4,
+       OCELOT_VCAP_KEY_IPV6
+};
+
+struct ocelot_vcap_key_vlan {
+       struct ocelot_vcap_vid vid;    /* VLAN ID (12 bit) */
+       struct ocelot_vcap_u8  pcp;    /* PCP (3 bit) */
+       enum ocelot_vcap_bit dei;    /* DEI */
+       enum ocelot_vcap_bit tagged; /* Tagged/untagged frame */
+};
+
+struct ocelot_vcap_key_etype {
+       struct ocelot_vcap_u48 dmac;
+       struct ocelot_vcap_u48 smac;
+       struct ocelot_vcap_u16 etype;
+       struct ocelot_vcap_u16 data; /* MAC data */
+};
+
+struct ocelot_vcap_key_llc {
+       struct ocelot_vcap_u48 dmac;
+       struct ocelot_vcap_u48 smac;
+
+       /* LLC header: DSAP at byte 0, SSAP at byte 1, Control at byte 2 */
+       struct ocelot_vcap_u32 llc;
+};
+
+struct ocelot_vcap_key_snap {
+       struct ocelot_vcap_u48 dmac;
+       struct ocelot_vcap_u48 smac;
+
+       /* SNAP header: Organization Code at byte 0, Type at byte 3 */
+       struct ocelot_vcap_u40 snap;
+};
+
+struct ocelot_vcap_key_arp {
+       struct ocelot_vcap_u48 smac;
+       enum ocelot_vcap_bit arp;       /* Opcode ARP/RARP */
+       enum ocelot_vcap_bit req;       /* Opcode request/reply */
+       enum ocelot_vcap_bit unknown;    /* Opcode unknown */
+       enum ocelot_vcap_bit smac_match; /* Sender MAC matches SMAC */
+       enum ocelot_vcap_bit dmac_match; /* Target MAC matches DMAC */
+
+       /**< Protocol addr. length 4, hardware length 6 */
+       enum ocelot_vcap_bit length;
+
+       enum ocelot_vcap_bit ip;       /* Protocol address type IP */
+       enum  ocelot_vcap_bit ethernet; /* Hardware address type Ethernet */
+       struct ocelot_vcap_ipv4 sip;     /* Sender IP address */
+       struct ocelot_vcap_ipv4 dip;     /* Target IP address */
+};
+
+struct ocelot_vcap_key_ipv4 {
+       enum ocelot_vcap_bit ttl;      /* TTL zero */
+       enum ocelot_vcap_bit fragment; /* Fragment */
+       enum ocelot_vcap_bit options;  /* Header options */
+       struct ocelot_vcap_u8 ds;
+       struct ocelot_vcap_u8 proto;      /* Protocol */
+       struct ocelot_vcap_ipv4 sip;      /* Source IP address */
+       struct ocelot_vcap_ipv4 dip;      /* Destination IP address */
+       struct ocelot_vcap_u48 data;      /* Not UDP/TCP: IP data */
+       struct ocelot_vcap_udp_tcp sport; /* UDP/TCP: Source port */
+       struct ocelot_vcap_udp_tcp dport; /* UDP/TCP: Destination port */
+       enum ocelot_vcap_bit tcp_fin;
+       enum ocelot_vcap_bit tcp_syn;
+       enum ocelot_vcap_bit tcp_rst;
+       enum ocelot_vcap_bit tcp_psh;
+       enum ocelot_vcap_bit tcp_ack;
+       enum ocelot_vcap_bit tcp_urg;
+       enum ocelot_vcap_bit sip_eq_dip;     /* SIP equals DIP  */
+       enum ocelot_vcap_bit sport_eq_dport; /* SPORT equals DPORT  */
+       enum ocelot_vcap_bit seq_zero;       /* TCP sequence number is zero */
+};
+
+struct ocelot_vcap_key_ipv6 {
+       struct ocelot_vcap_u8 proto; /* IPv6 protocol */
+       struct ocelot_vcap_u128 sip; /* IPv6 source (byte 0-7 ignored) */
+       struct ocelot_vcap_u128 dip; /* IPv6 destination (byte 0-7 ignored) */
+       enum ocelot_vcap_bit ttl;  /* TTL zero */
+       struct ocelot_vcap_u8 ds;
+       struct ocelot_vcap_u48 data; /* Not UDP/TCP: IP data */
+       struct ocelot_vcap_udp_tcp sport;
+       struct ocelot_vcap_udp_tcp dport;
+       enum ocelot_vcap_bit tcp_fin;
+       enum ocelot_vcap_bit tcp_syn;
+       enum ocelot_vcap_bit tcp_rst;
+       enum ocelot_vcap_bit tcp_psh;
+       enum ocelot_vcap_bit tcp_ack;
+       enum ocelot_vcap_bit tcp_urg;
+       enum ocelot_vcap_bit sip_eq_dip;     /* SIP equals DIP  */
+       enum ocelot_vcap_bit sport_eq_dport; /* SPORT equals DPORT  */
+       enum ocelot_vcap_bit seq_zero;       /* TCP sequence number is zero */
+};
+
+enum ocelot_mask_mode {
+       OCELOT_MASK_MODE_NONE,
+       OCELOT_MASK_MODE_PERMIT_DENY,
+       OCELOT_MASK_MODE_POLICY,
+       OCELOT_MASK_MODE_REDIRECT,
+};
+
+enum ocelot_es0_tag {
+       OCELOT_NO_ES0_TAG,
+       OCELOT_ES0_TAG,
+       OCELOT_FORCE_PORT_TAG,
+       OCELOT_FORCE_UNTAG,
+};
+
+enum ocelot_tag_tpid_sel {
+       OCELOT_TAG_TPID_SEL_8021Q,
+       OCELOT_TAG_TPID_SEL_8021AD,
+};
+
+struct ocelot_vcap_action {
+       union {
+               /* VCAP ES0 */
+               struct {
+                       enum ocelot_es0_tag push_outer_tag;
+                       enum ocelot_es0_tag push_inner_tag;
+                       enum ocelot_tag_tpid_sel tag_a_tpid_sel;
+                       int tag_a_vid_sel;
+                       int tag_a_pcp_sel;
+                       u16 vid_a_val;
+                       u8 pcp_a_val;
+                       u8 dei_a_val;
+                       enum ocelot_tag_tpid_sel tag_b_tpid_sel;
+                       int tag_b_vid_sel;
+                       int tag_b_pcp_sel;
+                       u16 vid_b_val;
+                       u8 pcp_b_val;
+                       u8 dei_b_val;
+               };
+
+               /* VCAP IS1 */
+               struct {
+                       bool vid_replace_ena;
+                       u16 vid;
+                       bool vlan_pop_cnt_ena;
+                       int vlan_pop_cnt;
+                       bool pcp_dei_ena;
+                       u8 pcp;
+                       u8 dei;
+                       bool qos_ena;
+                       u8 qos_val;
+                       u8 pag_override_mask;
+                       u8 pag_val;
+               };
+
+               /* VCAP IS2 */
+               struct {
+                       bool cpu_copy_ena;
+                       u8 cpu_qu_num;
+                       enum ocelot_mask_mode mask_mode;
+                       unsigned long port_mask;
+                       bool police_ena;
+                       struct ocelot_policer pol;
+                       u32 pol_ix;
+               };
+       };
+};
+
+struct ocelot_vcap_stats {
+       u64 bytes;
+       u64 pkts;
+       u64 used;
+};
+
+enum ocelot_vcap_filter_type {
+       OCELOT_VCAP_FILTER_DUMMY,
+       OCELOT_VCAP_FILTER_PAG,
+       OCELOT_VCAP_FILTER_OFFLOAD,
+};
+
+struct ocelot_vcap_filter {
+       struct list_head list;
+
+       enum ocelot_vcap_filter_type type;
+       int block_id;
+       int goto_target;
+       int lookup;
+       u8 pag;
+       u16 prio;
+       u32 id;
+
+       struct ocelot_vcap_action action;
+       struct ocelot_vcap_stats stats;
+       /* For VCAP IS1 and IS2 */
+       unsigned long ingress_port_mask;
+       /* For VCAP ES0 */
+       struct ocelot_vcap_port ingress_port;
+       struct ocelot_vcap_port egress_port;
+
+       enum ocelot_vcap_bit dmac_mc;
+       enum ocelot_vcap_bit dmac_bc;
+       struct ocelot_vcap_key_vlan vlan;
+
+       enum ocelot_vcap_key_type key_type;
+       union {
+               /* OCELOT_VCAP_KEY_ANY: No specific fields */
+               struct ocelot_vcap_key_etype etype;
+               struct ocelot_vcap_key_llc llc;
+               struct ocelot_vcap_key_snap snap;
+               struct ocelot_vcap_key_arp arp;
+               struct ocelot_vcap_key_ipv4 ipv4;
+               struct ocelot_vcap_key_ipv6 ipv6;
+       } key;
+};
+
+int ocelot_vcap_filter_add(struct ocelot *ocelot,
+                          struct ocelot_vcap_filter *rule,
+                          struct netlink_ext_ack *extack);
+int ocelot_vcap_filter_del(struct ocelot *ocelot,
+                          struct ocelot_vcap_filter *rule);
+
 #endif /* _OCELOT_VCAP_H_ */