...
All IPFix sampling has been implemented using OVS upcall mechanism. Based on the exporter configuration described in above “User guide”, certain number of packets are sampled through upcall execution. Each packet which “has been chosen” to be sampled is analyzed, and based on its content proper counters/data fields in IPFix interface are calculated. Majority of implementation takes place in ofproto/ofproto-dpif-ipfix.c and ofproto/ofproto-dpif-ipfix.h.
IPFIX – templates
IPFIX exporter/measurement engine upon connection to IPFix collector needs to send a data structure which is called – “IPFIX template”. Such template is literally set of data (counters) which will be sent to collector. If any new counter will have to be added in IPFix in OVS, existing template needs to be extended. Current templates are defined in:
...
static uint16_t ipfix_define_template_fields(enum ipfix_proto_l2 l2, enum ipfix_proto_l3 l3, enum ipfix_proto_l4 l4, bool virtual_obs_id_set, struct dp_packet *msg) |
IPFIX – data collection
General rule is that measurement process implemented in ofproto/ofproto-dpif-ipfix.c and ofproto/ofproto-dpif-ipfix.h, receives packets from upcall mechanism based on defined sampling rule (explained above).
...
static void ipfix_put_data_set(uint32_t export_time_sec, struct ipfix_flow_cache_entry *entry, enum ipfix_flow_end_reason flow_end_reason, const char *virtual_obs_id, uint8_t virtual_obs_len, struct dp_packet *msg) |
IPFIX – adding new counters.
If new counter will have to be added to IPFix measurement process, it is mandatory to:
- Update template
- Update parsing of the packet through “ipfix_cache_entry_init”.
- Update aggregation function “ipfix_cache_aggregate_entries”.
- Update sending function “ipfix_put_data_set”.
PATCH summary
List of implemented counters for IPFIX
Counter name | Link | Upstreamed | Commit ID |
octetDeltaCount |
https://patchwork.ozlabs.org/patch/752829/
| Y | fe520682421dd361fa33afb9f48a525daa1501ed |
droppedOctetDeltaCount |
https://patchwork.ozlabs.org/patch/775166/ https://patchwork.ozlabs.org/patch/788373/
| Y | 564230b6c982fc5b6df06b139a938edce874a5f7 |
postMCastPacketDeltaCount |
| Y | ebfe9a219027dc88f7fa36fc550ff0fa03922211 |
tcpSynTotalCount |
| Y | 0b4f83e2dce44625daa56983c34ccd14a32bf762 |
List of implemented counters for MIBs support
Counters | Link/Comment | Upstreamed | Commit ID |
octetTotalCount droppedPacketTotalCount | Implemented through MSP-5822 | Y | fe520682421dd361fa33afb9f48a525daa1501ed |
ingressUnicastPacketTotalCount ingressMulticastPacketTotalCount |
| Y | ebfe9a219027dc88f7fa36fc550ff0fa03922211 |
notSentPacketTotalCount | Y | d564c4bb536985acb246b9c4a72a0b1af2f9ede7 | |
interfaceName ifDescr |
| N |
|
List of Counters which are not implemented
ifOutErrors | There was no proper mapping found in IPFIX. |
ifHCOutOctets | 64bit: the total number of octets transmitted out of the interface - mapped to IPFIX postOctetTotalCount. The definition of this Information Element is identical to the definition of Information Element 'octetTotalCount', except that it reports a potentially modified value caused by a middlebox function after the packet passed the Observation Point.
|
Summary
“Have any known limitations been documented? (interoperability issues, additional work not planned, etc…)”
There are no limitations.
...