Merge "drivers: net: ipq9574: Add src_mac drop acl"

This commit is contained in:
Linux Build Service Account 2022-03-17 11:11:45 -07:00 committed by Gerrit - the friendly Code Review server
commit 3aa37aff5f
3 changed files with 43 additions and 20 deletions

View file

@ -1873,6 +1873,8 @@ void get_phy_address(int offset)
int ipq9574_edma_init(void *edma_board_cfg)
{
struct eth_device *dev[IPQ9574_EDMA_DEV];
char octets[16];
int field0, field1;
struct ipq9574_edma_common_info *c_info[IPQ9574_EDMA_DEV];
struct ipq9574_edma_hw *hw[IPQ9574_EDMA_DEV];
uchar enet_addr[IPQ9574_EDMA_DEV * 6];
@ -1976,6 +1978,17 @@ int ipq9574_edma_init(void *edma_board_cfg)
dev[i]->enetaddr[4],
dev[i]->enetaddr[5]);
snprintf(octets, sizeof(octets), "%x%x",
dev[i]->enetaddr[0], dev[i]->enetaddr[1]);
field0 = simple_strtoul(octets, NULL, 16);
snprintf(octets, sizeof(octets), "%x%x%x%x",
dev[i]->enetaddr[2], dev[i]->enetaddr[3],
dev[i]->enetaddr[4], dev[i]->enetaddr[5]);
field1 = simple_strtoul(octets, NULL, 16);
/* Drop packets with DUT's mac addr */
ipq9574_ppe_acl_set(4, 0x1, field0, field1, 0xffffffff, 0x0, 0x1);
snprintf(dev[i]->name, sizeof(dev[i]->name), "eth%d", i);
ipq9574_edma_dev[i]->dev = dev[i];

View file

@ -81,7 +81,7 @@ void ppe_ipo_action_set(union ipo_action_u *hw_act, int rule_id)
}
}
void ipq9574_ppe_acl_set(int rule_id, int rule_type, int pkt_type, int l4_port_no, int l4_port_mask, int permit, int deny)
void ipq9574_ppe_acl_set(int rule_id, int rule_type, int field0, int field1, int mask, int permit, int deny)
{
union ipo_rule_reg_u hw_reg = {0};
union ipo_mask_reg_u hw_mask = {0};
@ -92,30 +92,37 @@ void ipq9574_ppe_acl_set(int rule_id, int rule_type, int pkt_type, int l4_port_n
memset(&hw_act, 0, sizeof(hw_act));
if (rule_id < MAX_RULE) {
hw_act.bf.dest_info_change_en = 1;
hw_mask.bf.maskfield_0 = mask;
hw_reg.bf.rule_type = rule_type;
if (rule_type == ADPT_ACL_HPPE_IPV4_DIP_RULE) {
hw_reg.bf.rule_type = ADPT_ACL_HPPE_IPV4_DIP_RULE;
hw_reg.bf.rule_field_0 = l4_port_no;
hw_reg.bf.rule_field_1 = pkt_type<<17;
hw_mask.bf.maskfield_0 = l4_port_mask;
hw_reg.bf.rule_field_0 = field1;
hw_reg.bf.rule_field_1 = field0<<17;
hw_mask.bf.maskfield_1 = 7<<17;
if (permit == 0x0) {
hw_act.bf.dest_info_change_en = 1;
hw_act.bf.fwd_cmd = 0;/*forward*/
hw_act.bf.fwd_cmd = 0;/* forward */
hw_reg.bf.pri = 0x1;
}
if (deny == 0x1) {
hw_act.bf.dest_info_change_en = 1;
hw_act.bf.fwd_cmd = 1;/*drop*/
hw_act.bf.fwd_cmd = 1;/* drop */
hw_reg.bf.pri = 0x0;
}
hw_reg.bf.src_0 = 0x0;
hw_reg.bf.src_1 = 0x3f;
ppe_ipo_rule_reg_set(&hw_reg, rule_id);
ppe_ipo_mask_reg_set(&hw_mask, rule_id);
ppe_ipo_action_set(&hw_act, rule_id);
} else if (rule_type == ADPT_ACL_HPPE_MAC_SA_RULE) {
/* src mac AC rule */
hw_reg.bf.rule_field_0 = field1;
hw_reg.bf.rule_field_1 = field0;
hw_mask.bf.maskfield_1 = 0xffff;
hw_act.bf.fwd_cmd = 1;/* drop */
hw_reg.bf.pri = 0x2;
/* bypass fdb lean and fdb freash */
hw_act.bf.bypass_bitmap_0 = 0x1800;
}
/* bind port1-port6 */
hw_reg.bf.src_0 = 0x0;
hw_reg.bf.src_1 = 0x3F;
ppe_ipo_rule_reg_set(&hw_reg, rule_id);
ppe_ipo_mask_reg_set(&hw_mask, rule_id);
ppe_ipo_action_set(&hw_act, rule_id);
}
}

View file

@ -68,8 +68,9 @@ enum {
UDP_PKT,
};
#define ADPT_ACL_HPPE_IPV4_DIP_RULE 4
#define MAX_RULE 512
#define ADPT_ACL_HPPE_IPV4_DIP_RULE 4
#define ADPT_ACL_HPPE_MAC_SA_RULE 1
#define MAX_RULE 512
struct ipo_rule_reg {
uint32_t rule_field_0:32;
@ -106,8 +107,10 @@ union ipo_mask_reg_u {
struct ipo_action {
uint32_t dest_info_change_en:1;
uint32_t fwd_cmd:2;
uint32_t _reserved0:29;
uint32_t _reserved1:32;
uint32_t _reserved0:15;
uint32_t bypass_bitmap_0:14;
uint32_t bypass_bitmap_1:18;
uint32_t _reserved1:14;
uint32_t _reserved2:32;
uint32_t _reserved3:32;
uint32_t _reserved4:32;