Commit 9a266bba authored by Alessandro Rubini's avatar Alessandro Rubini

pfilter: novlan: non need to split ip_uni and ip_ok rules

This shortens the rule-set by one rule, making space for pdelay.

IP is acceptable whether unicast or broadcast. Thus, remove the IP_UNI
intermediate calculation and use only IP_OK.

Most of the lines in this commit are a renaming of FRAME_OUR_MAC to
FRAME_MAC_OK, with no real effect, because we'll coalesce all valid
macs in a single bit (I planned to use it in this commit, but I did
not, still I don't want to split the patch).
Signed-off-by: Alessandro Rubini's avatarAlessandro Rubini <rubini@gnudd.com>
parent 06fed36e
......@@ -211,7 +211,7 @@ enum pf_symbolic_regs {
/* The first set is used for straight comparisons */
FRAME_BROADCAST = R_1,
FRAME_OUR_MAC,
FRAME_MAC_OK,
FRAME_OUR_VLAN,
FRAME_TYPE_IPV4,
FRAME_TYPE_PTP2,
......@@ -374,9 +374,9 @@ void pfilter_init_novlan(char *fname)
*/
/* Local frame, using fake MAC: 12:34:56:78:9a:bc */
pfilter_cmp(0, 0x1234, 0xffff, MOV, FRAME_OUR_MAC);
pfilter_cmp(1, 0x5678, 0xffff, AND, FRAME_OUR_MAC);
pfilter_cmp(2, 0x9abc, 0xffff, AND, FRAME_OUR_MAC);
pfilter_cmp(0, 0x1234, 0xffff, MOV, FRAME_MAC_OK);
pfilter_cmp(1, 0x5678, 0xffff, AND, FRAME_MAC_OK);
pfilter_cmp(2, 0x9abc, 0xffff, AND, FRAME_MAC_OK);
/* Broadcast frame */
pfilter_cmp(0, 0xffff, 0xffff, MOV, FRAME_BROADCAST);
......@@ -392,9 +392,8 @@ void pfilter_init_novlan(char *fname)
pfilter_cmp(6, 0x0800, 0xffff, MOV, FRAME_TYPE_IPV4);
pfilter_cmp(6, 0x0806, 0xffff, MOV, FRAME_TYPE_ARP);
/* Mark bits for ip unicast and ip-valid (unicast or broadcast) */
pfilter_logic2(FRAME_IP_UNI, FRAME_OUR_MAC, AND, FRAME_TYPE_IPV4);
pfilter_logic3(FRAME_IP_OK, FRAME_BROADCAST, OR, FRAME_OUR_MAC, AND, FRAME_TYPE_IPV4);
/* Mark one bits for ip-valid (unicast or broadcast) */
pfilter_logic3(FRAME_IP_OK, FRAME_BROADCAST, OR, FRAME_MAC_OK, AND, FRAME_TYPE_IPV4);
/* Ethernet = 14 bytes, Offset to type in IP: 8 bytes = 22/2 = 11 */
pfilter_cmp(11, 0x0001, 0x00ff, MOV, FRAME_ICMP);
......@@ -403,7 +402,7 @@ void pfilter_init_novlan(char *fname)
/* For CPU: arp broadcast or icmp unicast or ptp */
pfilter_logic3(FRAME_FOR_CPU, FRAME_BROADCAST, AND, FRAME_TYPE_ARP, OR, FRAME_TYPE_PTP2);
pfilter_logic3(FRAME_FOR_CPU, FRAME_IP_UNI, AND, FRAME_ICMP, OR, FRAME_FOR_CPU);
pfilter_logic3(FRAME_FOR_CPU, FRAME_IP_OK, AND, FRAME_ICMP, OR, FRAME_FOR_CPU);
/* Now look in UDP ports: at offset 18 (14 + 20 + 8 = 36) */
pfilter_cmp(18, 0x0000, 0xff00, MOV, PORT_UDP_HOST); /* ports 0-255 */
......@@ -445,9 +444,9 @@ void pfilter_init_vlan(char *fname)
*/
/* Local frame, using fake MAC: 12:34:56:78:9a:bc */
pfilter_cmp(0, 0x1234, 0xffff, MOV, FRAME_OUR_MAC);
pfilter_cmp(1, 0x5678, 0xffff, AND, FRAME_OUR_MAC);
pfilter_cmp(2, 0x9abc, 0xffff, AND, FRAME_OUR_MAC);
pfilter_cmp(0, 0x1234, 0xffff, MOV, FRAME_MAC_OK);
pfilter_cmp(1, 0x5678, 0xffff, AND, FRAME_MAC_OK);
pfilter_cmp(2, 0x9abc, 0xffff, AND, FRAME_MAC_OK);
/* Broadcast frame */
pfilter_cmp(0, 0xffff, 0xffff, MOV, FRAME_BROADCAST);
......@@ -468,7 +467,7 @@ void pfilter_init_vlan(char *fname)
/* Loose match: keep all bcast, all our mac and all ptp ... */
pfilter_logic3(FRAME_FOR_CPU,
FRAME_OUR_MAC, OR, FRAME_BROADCAST, OR, FRAME_TYPE_PTP2);
FRAME_MAC_OK, OR, FRAME_BROADCAST, OR, FRAME_TYPE_PTP2);
/* .... but only for our current VLAN */
pfilter_logic2(R_CLASS(0), FRAME_FOR_CPU, AND, FRAME_OUR_VLAN);
......@@ -480,7 +479,7 @@ void pfilter_init_vlan(char *fname)
*
* We reuse FRAME_OUR_VLAN, even if it's not OUR as in "this CPU"
*/
pfilter_logic2(R_TMP, FRAME_OUR_MAC, OR, FRAME_BROADCAST);
pfilter_logic2(R_TMP, FRAME_MAC_OK, OR, FRAME_BROADCAST);
pfilter_cmp(7, CONFIG_VLAN_1_FOR_CLASS7, 0x0fff, MOV, FRAME_OUR_VLAN);
pfilter_cmp(7, CONFIG_VLAN_2_FOR_CLASS7, 0x0fff, OR, FRAME_OUR_VLAN);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment