Skip to content
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

[doc] Add L3 drop counters SNMP design #578

Merged
merged 3 commits into from
Jul 7, 2020
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
98 changes: 98 additions & 0 deletions doc/Port_illegal_packets_drop_design.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,98 @@
# Port illegal packets drop design

### High level design document

# List of Tables
* [Table 1: Revision](#revision)
* [Table 2: Abbreviations](#definitionsabbreviation)
* [Table 3: SAI counter mapping](#rfc1213-etries-and-sai-counter-mapping)
* [Table 4: IANA ifTypes](#interface-types-and-iana-iftypes)

###### Revision
| Rev | Date | Author | Change Description |
|:---:|:-----------:|:------------------:|-----------------------------------|
| 0.1 | | Mykola Faryma | Initial version |


### About this document

This document provides general information about the design of l3 drop packets via SNMP in SONiC.

### Scope

This document describes the high level design of Interface MIB extension (RFC1213) in regard to l3 counters.

###### Table 2: Abbreviations
| Definitions/Abbreviation | Description |
|--------------------------|--------------------------------------------|
| SNMP | Simple Network Management Protocol |
| API | Application Programmable Interface |
| SAI | Switch Abstraction Interface |

# Requirements

The l3 interface counters should be accessible via SNMP Interface MIB.
For RIFs, the l3 counters are added to the l2 counters of the underlay port.

# Modules design

The l3 counters are polled to the COUNTERS_DB by the rifcounter flex counter groups.
The RIF counters is not enabled/supported for every vendor (expected that l3 drops are counted in l2 drops for these platforms).
The MIB should work regardsless of RIF FC group is enabled or not.

## RFC1213 entries and SAI counter mapping

Lets define a mapping for MIB entries to the SAI counters (l2 & l3):

| MIB entry | L2 SAI counter | L3 SAI counter |
| ------------------ |:--------------:| :-------------:|
| ifInOctets | SAI_PORT_STAT_IF_IN_OCTETS | SAI_ROUTER_INTERFACE_STAT_IN_OCTETS |
| ifInUcastPkts | SAI_PORT_STAT_IF_IN_UCAST_PKTS | SAI_ROUTER_INTERFACE_STAT_IN_PACKETS |
| ifInNUcastPkts | SAI_PORT_STAT_IF_IN_NON_UCAST_PKTS | |
| ifInDiscards | SAI_PORT_STAT_IF_IN_DISCARDS | |
| ifInErrors | SAI_PORT_STAT_IF_IN_ERRORS | SAI_ROUTER_INTERFACE_STAT_IN_ERROR_PACKETS |
| ifInUnknownProtos | SAI_PORT_STAT_IF_IN_UNKNOWN_PROTOS | |
| ifOutOctets | SAI_PORT_STAT_IF_OUT_OCTETS | SAI_ROUTER_INTERFACE_STAT_OUT_OCTETS |
| ifOutUcastPkts | SAI_PORT_STAT_IF_OUT_UCAST_PKTS | SAI_ROUTER_INTERFACE_STAT_OUT_PACKETS |
| ifOutNUcastPkts | SAI_PORT_STAT_IF_OUT_NON_UCAST_PKTS | |
| ifOutDiscards | SAI_PORT_STAT_IF_OUT_DISCARDS | |
| ifOutErrors | SAI_PORT_STAT_IF_OUT_ERRORS | SAI_ROUTER_INTERFACE_STAT_OUT_ERROR_PACKETS |
| ifOutQLen | SAI_PORT_STAT_IF_OUT_QLEN | |

## Interface types and IANA iftypes

The `ifType` for each of the interfaces:

| Interface | IANA Iftype | Proposed implementation |
| ---------- |:--------------:| :---------:|
| port | 6 ethernetCsmacd | Already implemented |
| RIF | - | Add RIF counter values to port counters according to Table 3 |
| Vlan Int | 136 l3ipvlan | Implement new interface with type 136 |
| Lag | 161 ieee8023adLag | Already implemented |

## py-swsssdk changes

Extend py-swsssdk to provide utility functions to:
- get oid mapping between RIFs and ports.
- get vlan interface oid list

Example:
```
>>> port_util.get_rif_port_map(db)
{'60000000007c7': '1000000000587' [, 'rif_oid': 'port_oid']}
```


## sonic-snmpagent changes

Interface MIB's `InterfacesUpdater` will contain port to rif map. When counters are updated if RIF oid is present in the "COUNTERS" table of COUNTERS_DB,
the counters are aggredated according to Table 3. If no l3 counters are present, behaviour remains unchanged.
Vlan interface entry is introduced, with IANA ifType 136

Snmpagent is extended with functions to update vlan interface list and rif to port mapping (using py-swsssdk utility functions).

# Testing

`test_snmp_interfaces.py` is covering the MIB. The test will be updated according to the MIB changes.

# Open questions