netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / lib / sflow_receiver.c
index aff62fe..cde1359 100644 (file)
@@ -227,9 +227,10 @@ inline static u_int32_t addressEncodingLength(SFLAddress *addr) {
     return (addr->type == SFLADDRESSTYPE_IP_V6) ? 20 : 8;  // type + address (unspecified == IPV4)
 }
 
-inline static void putMACAddress(SFLReceiver *receiver, u_int8_t *mac)
+inline static void putMACAddress(SFLReceiver *receiver,
+                                 const struct eth_addr mac)
 {
-    memcpy(receiver->sampleCollector.datap, mac, 6);
+    memcpy(receiver->sampleCollector.datap, &mac, 6);
     receiver->sampleCollector.datap += 2;
 }
 
@@ -652,6 +653,8 @@ static int computeCountersSampleSize(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_
        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;
+       case SFLCOUNTERS_APP_RESOURCES: elemSiz = SFL_CTR_APP_RESOURCES_XDR_SIZE; break;
+       case SFLCOUNTERS_OVSDP: elemSiz = SFL_CTR_OVSDP_XDR_SIZE; break;
        default:
            sflError(receiver, "unexpected counters_tag");
            return -1;
@@ -774,6 +777,24 @@ int sfl_receiver_writeCountersSample(SFLReceiver *receiver, SFL_COUNTERS_SAMPLE_
            case SFLCOUNTERS_PORTNAME:
                putString(receiver, &elem->counterBlock.portName.portName);
                break;
+           case SFLCOUNTERS_APP_RESOURCES:
+               putNet32(receiver, elem->counterBlock.appResources.user_time);
+               putNet32(receiver, elem->counterBlock.appResources.system_time);
+               putNet64(receiver, elem->counterBlock.appResources.mem_used);
+               putNet64(receiver, elem->counterBlock.appResources.mem_max);
+               putNet32(receiver, elem->counterBlock.appResources.fd_open);
+               putNet32(receiver, elem->counterBlock.appResources.fd_max);
+               putNet32(receiver, elem->counterBlock.appResources.conn_open);
+               putNet32(receiver, elem->counterBlock.appResources.conn_max);
+               break;
+           case SFLCOUNTERS_OVSDP:
+               putNet32(receiver, elem->counterBlock.ovsdp.n_hit);
+               putNet32(receiver, elem->counterBlock.ovsdp.n_missed);
+               putNet32(receiver, elem->counterBlock.ovsdp.n_lost);
+               putNet32(receiver, elem->counterBlock.ovsdp.n_mask_hit);
+               putNet32(receiver, elem->counterBlock.ovsdp.n_flows);
+               putNet32(receiver, elem->counterBlock.ovsdp.n_masks);
+               break;
            default:
                sflError(receiver, "unexpected counters_tag");
                return -1;