X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=lib%2Fsflow_receiver.c;h=aff62fed12a9f7082114c9c899c441719eef865e;hb=50b9699fe49b66de64d0d0b1803bb13e95ca2c2e;hp=e6fc9a7f9bfe49048532595f5063dfeed5aa7ed5;hpb=afc63bb4bc0692af8bfa16d2a573b8b3bce52895;p=cascardo%2Fovs.git diff --git a/lib/sflow_receiver.c b/lib/sflow_receiver.c index e6fc9a7f9..aff62fed1 100644 --- a/lib/sflow_receiver.c +++ b/lib/sflow_receiver.c @@ -464,6 +464,14 @@ static int computeFlowSampleSize(SFLReceiver *receiver, SFL_FLOW_SAMPLE_TYPE *fs case SFLFLOW_EX_MPLS_FTN: elemSiz = mplsFtnEncodingLength(&elem->flowType.mpls_ftn); break; case SFLFLOW_EX_MPLS_LDP_FEC: elemSiz = mplsLdpFecEncodingLength(&elem->flowType.mpls_ldp_fec); break; case SFLFLOW_EX_VLAN_TUNNEL: elemSiz = vlanTunnelEncodingLength(&elem->flowType.vlan_tunnel); break; + case SFLFLOW_EX_IPV4_TUNNEL_EGRESS: + case SFLFLOW_EX_IPV4_TUNNEL_INGRESS: + elemSiz = sizeof(SFLSampled_ipv4); + break; + case SFLFLOW_EX_VNI_EGRESS: + case SFLFLOW_EX_VNI_INGRESS: + elemSiz = sizeof(SFLExtended_vni); + break; default: sflError(receiver, "unexpected packet_data_tag"); return -1; @@ -560,6 +568,8 @@ int sfl_receiver_writeFlowSample(SFLReceiver *receiver, SFL_FLOW_SAMPLE_TYPE *fs putNet32(receiver, elem->flowType.ethernet.eth_type); break; case SFLFLOW_IPV4: + case SFLFLOW_EX_IPV4_TUNNEL_EGRESS: + case SFLFLOW_EX_IPV4_TUNNEL_INGRESS: putNet32(receiver, elem->flowType.ipv4.length); putNet32(receiver, elem->flowType.ipv4.protocol); put32(receiver, elem->flowType.ipv4.src_ip.addr); @@ -591,6 +601,11 @@ int sfl_receiver_writeFlowSample(SFLReceiver *receiver, SFL_FLOW_SAMPLE_TYPE *fs case SFLFLOW_EX_MPLS_FTN: putMplsFtn(receiver, &elem->flowType.mpls_ftn); break; case SFLFLOW_EX_MPLS_LDP_FEC: putMplsLdpFec(receiver, &elem->flowType.mpls_ldp_fec); break; case SFLFLOW_EX_VLAN_TUNNEL: putVlanTunnel(receiver, &elem->flowType.vlan_tunnel); break; + case SFLFLOW_EX_VNI_EGRESS: + case SFLFLOW_EX_VNI_INGRESS: + putNet32(receiver, elem->flowType.tunnel_vni.vni); + break; + default: sflError(receiver, "unexpected packet_data_tag"); return -1; @@ -629,11 +644,14 @@ static int computeCountersSampleSize(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_ cs->num_elements++; siz += 8; /* tag, length */ switch(elem->tag) { - case SFLCOUNTERS_GENERIC: elemSiz = sizeof(elem->counterBlock.generic); break; - case SFLCOUNTERS_ETHERNET: elemSiz = sizeof(elem->counterBlock.ethernet); break; + case SFLCOUNTERS_GENERIC: elemSiz = SFL_CTR_GENERIC_XDR_SIZE; break; + case SFLCOUNTERS_ETHERNET: elemSiz = SFL_CTR_ETHERNET_XDR_SIZE; break; case SFLCOUNTERS_TOKENRING: elemSiz = sizeof(elem->counterBlock.tokenring); break; case SFLCOUNTERS_VG: elemSiz = sizeof(elem->counterBlock.vg); break; case SFLCOUNTERS_VLAN: elemSiz = sizeof(elem->counterBlock.vlan); break; + case SFLCOUNTERS_LACP: elemSiz = SFL_CTR_LACP_XDR_SIZE; break; + case SFLCOUNTERS_OPENFLOWPORT: elemSiz = SFL_CTR_OPENFLOWPORT_XDR_SIZE; break; + case SFLCOUNTERS_PORTNAME: elemSiz = stringEncodingLength(&elem->counterBlock.portName.portName); break; default: sflError(receiver, "unexpected counters_tag"); return -1; @@ -735,6 +753,27 @@ int sfl_receiver_writeCountersSample(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_ putNet32(receiver, elem->counterBlock.vlan.broadcastPkts); putNet32(receiver, elem->counterBlock.vlan.discards); break; + case SFLCOUNTERS_LACP: + putMACAddress(receiver, elem->counterBlock.lacp.actorSystemID); + putMACAddress(receiver, elem->counterBlock.lacp.partnerSystemID); + putNet32(receiver, elem->counterBlock.lacp.attachedAggID); + put32(receiver, elem->counterBlock.lacp.portState.all); + putNet32(receiver, elem->counterBlock.lacp.LACPDUsRx); + putNet32(receiver, elem->counterBlock.lacp.markerPDUsRx); + putNet32(receiver, elem->counterBlock.lacp.markerResponsePDUsRx); + putNet32(receiver, elem->counterBlock.lacp.unknownRx); + putNet32(receiver, elem->counterBlock.lacp.illegalRx); + putNet32(receiver, elem->counterBlock.lacp.LACPDUsTx); + putNet32(receiver, elem->counterBlock.lacp.markerPDUsTx); + putNet32(receiver, elem->counterBlock.lacp.markerResponsePDUsTx); + break; + case SFLCOUNTERS_OPENFLOWPORT: + putNet64(receiver, elem->counterBlock.ofPort.datapath_id); + putNet32(receiver, elem->counterBlock.ofPort.port_no); + break; + case SFLCOUNTERS_PORTNAME: + putString(receiver, &elem->counterBlock.portName.portName); + break; default: sflError(receiver, "unexpected counters_tag"); return -1;