Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

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,
   enum ipfix_proto_tunnel tunnel,

                             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
octetDeltaSumOfSquares
octetTotalCount
octetTotalSumOfSquares
packetDeltaCount
packetTotalCount

 

 

https://patchwork.ozlabs.org/patch/752829/

 

 

 

Y

fe520682421dd361fa33afb9f48a525daa1501ed

droppedOctetDeltaCount
droppedPacketDeltaCount
droppedOctetTotalCount
droppedPacketTotalCount

 

https://patchwork.ozlabs.org/patch/775166/

https://patchwork.ozlabs.org/patch/788373/

 

Y

564230b6c982fc5b6df06b139a938edce874a5f7

postMCastPacketDeltaCount
postMCastOctetDeltaCount
postMCastPacketTotalCount
postMCastOctetTotalCount

 

https://patchwork.ozlabs.org/patch/780701/

Y

ebfe9a219027dc88f7fa36fc550ff0fa03922211

tcpSynTotalCount
tcpFinTotalCount
tcpRstTotalCount
tcpPshTotalCount
tcpAckTotalCount
tcpUrgTotalCount

 

 

https://patchwork.ozlabs.org/patch/761013/

Y

0b4f83e2dce44625daa56983c34ccd14a32bf762

 

List of implemented counters for MIBs support

Counters

Link/Comment

Upstreamed

Commit ID

octetTotalCount

droppedPacketTotalCount

Implemented through MSP-5822

Y

fe520682421dd361fa33afb9f48a525daa1501ed

ingressUnicastPacketTotalCount
egressUnicastPacketTotalCount
ingressBroadcastPacketTotalCount
egressBroadcastPacketTotalCount

ingressMulticastPacketTotalCount

 

https://patchwork.ozlabs.org/patch/780701/

Y

ebfe9a219027dc88f7fa36fc550ff0fa03922211

notSentPacketTotalCount

https://patchwork.ozlabs.org/patch/784630/

Y

d564c4bb536985acb246b9c4a72a0b1af2f9ede7

interfaceName
ingressInterface
egressInterface

ifDescr
ifType

 

https://patchwork.ozlabs.org/patch/837802/

https://patchwork.ozlabs.org/patch/837803/

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.
First of all there is no clear way to map outgoing packets from interface on IPFIX sampling level. In fact it not possible to do. Sampling mechanism is not aware of any interface specific data, thus counter which can be mapped to ifHCOutOctets doesn't exist. When initial mapping was done, it was assumed that post counter would describe data which we need, however its definition, is entirely different:

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.


Middlebox is any function that can potentially change the packet, so in practice this could be for example: NAT. When packet leaves middlebox function and passes observation point, it is still not determined that packet will reach output port, and will be send out from the interface. This counter was meant to describe totally different information, and it is not connected with outgoing octets from interface.

 

 

Summary

 

“Have any known limitations been documented? (interoperability issues, additional work not planned, etc…)”
There are no limitations.

...