-
Notifications
You must be signed in to change notification settings - Fork 506
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Add a RIF attribute to specify if the corresponding My MAC entry should not be created.. #2021
base: master
Are you sure you want to change the base?
Conversation
@itaibaz
|
Hi, the comment must have been from someone else, not me |
@itaibaz, @rck-innovium, @JaiOCP - could you please help review? |
@erohsik - please help resolve conflicts on the branch |
b68a3df
to
d1c175f
Compare
be used in place of any implicit entry created during RIF processing Signed-off-by: Kishore Gummadidala <kishorg@google.com>
Done... |
@rck-innovium, @JaiOCP - could you please help sign-off? |
* @default SAI_NULL_OBJECT_ID | ||
*/ | ||
SAI_ROUTER_INTERFACE_ATTR_MY_MAC, | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- If SAI_ROUTER_INTERFACE_ATTR_MY_MAC is not null, does it mean that the device must not create a termination entry with MAC == SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS?
- What is the meaning of binding a RIF to MY_MAC entry? Does it mean that the MY_MAC entry takes effect only for packets that ingress on this RIF? I am trying to see how it relates to SAI_MY_MAC_ATTR_PORT/VLAN_ID
- And lastly, why not achieve this by having a SAI_ROUTER_INTERFACE_ATTR_NO_TERM_MAC of type boolean to achieve the goal listed in the heading.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Yes, the device will skip creating a termination entry with the RIF SMAC
2, 3. A bool attribute was in the original change, but during the PR review, a suggestion was made to add the corresponding MY_MAC entry so that the MY_MAC entry does not get deleted inadvertently while the RIF is still relying on it for L3 forwarding determination.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks. I prefer your original model over the suggestion. I think all NOS would anyway maintain this reference counting; we can avoid adding unnecessary state in the SAI implementation.
Further, the suggested model gives a impression that the pointed to MyMAC entry should only be used by the RIFs that point to this MyMAC entry and vice versa. Today, one RIF can be terminated by more than one MyMAC entries. One MyMAC entry (if we skip SAI_MY_MAC_ATTR_PORT/VLAN_ID) can terminate multiple RIFs.
@JaiOCP @itaibaz Can you please give your feedback on the above.
Today, SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS is create-and-set, however SAI_ROUTER_INTERFACE_ATTR_MY_MAC is create-only. Any reasons?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rck-innovium Even with this proposal many RIF can point to the same my mac object, right?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The requirement, as I understand it, is that the NOS needs a way to control whether a RIF-specific Router MAC entry should be created or not. Today, it is created by default. This is an useful feature to have and the original proposal of having a boolean attribute was clear. The modification from boolean to OID of type RIF is ambiguous for the below reasons.
Background
SAI has a separate My MAC entry that is added independently of the RIF. This entry can be either MAC (with mask) only or can include Port/VLAN. So, it is not necessarily restricted to a particular RIF. It can match any of the packets coming into the switch. IIRC, one of the common reasons to use this was to scale the number of RIFs that can be created without having to burn separate per-RIF router MAC entries.
SAI_ROUTER_INTERFACE_ATTR_SRC_MAC_ADDRESS will still be set and is to be used as the Source MAC of packets routed out of this RIF.
Example
Now, with the modified proposal, consider the example below:
Step 1: MyMAC objects created
OID | MAC | PORT_ID | VLAN_ID | Priority |
---|---|---|---|---|
MyMAC1 | 00:01:02:03:04:05 | Port1 | 0 | 100 |
MyMAC2 | 00:01:02:03:04:06 | NULL | 0 | 1 |
Step 2: RIF objects created
RIF# | SAI_ROUTER_INTERFACE_ATTR_MY_MAC |
---|---|
RIF1 | MyMAC1 |
RIF2 | MyMAC2 |
RIF3 | MyMAC2 |
RIF4 | MyMAC1 |
Ambiguities
The behavior of MyMAC is independent of RIF
As per the MyMAC entry definition (PR1243), packets coming in on RIF1 with DMAC as 00:01:02:03:04:06 (MyMAC2) will still get matched even when RIF1's SAI_ROUTER_INTERFACE_ATTR_MY_MAC is only pointing to MyMAC1. But the configuration above is giving a wrong impression that MyMAC2 is applicable only for pkts coming in on RIF2 and RIF3, not for pkts on RIF1.
Application can still create inconsistencies
A comment given for this PR (PR2021) was to make the new RIF attribute a MyMAC OID instead of it being a bool. This was to avoid inconsistencies like the MyMAC entry getting deleted when a RIF is relying on it.
Say in the above example, RIF4 is of type SAI_ROUTER_INTERFACE_TYPE_PORT and is created on Port2. Then RIF4 has inconsistent programming since MyMAC1 only matches packets coming in on Port1.
Other Drawbacks
A RIF can have more than one MyMAC entry
In the current SAI model, a RIF can have more than one MyMAC entry. So, SAI_ROUTER_INTERFACE_ATTR_MY_MAC needs to be an OID List rather than an OID.
Add an attribute used to specify if My MAC entry need not be created for this {port, vlan, MAC address}.