netdev-dpdk: fix mbuf leaks
[cascardo/ovs.git] / datapath-windows / ovsext / PacketParser.c
index 219ddac..bd6910c 100644 (file)
@@ -84,8 +84,8 @@ OvsGetPacketBytes(const NET_BUFFER_LIST *nbl,
 
 NDIS_STATUS
 OvsParseIPv6(const NET_BUFFER_LIST *packet,
-          OvsFlowKey *key,
-          POVS_PACKET_HDR_INFO layers)
+             OvsFlowKey *key,
+             POVS_PACKET_HDR_INFO layers)
 {
     UINT16 ofs = layers->l3Offset;
     IPv6Hdr ipv6HdrStorage;
@@ -178,24 +178,38 @@ OvsParseIPv6(const NET_BUFFER_LIST *packet,
 
 VOID
 OvsParseTcp(const NET_BUFFER_LIST *packet,
-         L4Key *flow,
-         POVS_PACKET_HDR_INFO layers)
+            L4Key *flow,
+            POVS_PACKET_HDR_INFO layers)
 {
     TCPHdr tcpStorage;
     const TCPHdr *tcp = OvsGetTcp(packet, layers->l4Offset, &tcpStorage);
     if (tcp) {
         flow->tpSrc = tcp->source;
         flow->tpDst = tcp->dest;
-        flow->flags = OvsGetTcpFlags(packet, layers);
         layers->isTcp = 1;
         layers->l7Offset = layers->l4Offset + 4 * tcp->doff;
     }
 }
 
+VOID
+OvsParseSctp(const NET_BUFFER_LIST *packet,
+             L4Key *flow,
+             POVS_PACKET_HDR_INFO layers)
+{
+    SCTPHdr sctpStorage;
+    const SCTPHdr *sctp = OvsGetSctp(packet, layers->l4Offset, &sctpStorage);
+    if (sctp) {
+        flow->tpSrc = sctp->source;
+        flow->tpDst = sctp->dest;
+        layers->isSctp = 1;
+        layers->l7Offset = layers->l4Offset + sizeof *sctp;
+    }
+}
+
 VOID
 OvsParseUdp(const NET_BUFFER_LIST *packet,
-         L4Key *flow,
-         POVS_PACKET_HDR_INFO layers)
+            L4Key *flow,
+            POVS_PACKET_HDR_INFO layers)
 {
     UDPHdr udpStorage;
     const UDPHdr *udp = OvsGetUdp(packet, layers->l4Offset, &udpStorage);