diff options
author | Sairam Venugopal <vsairam@vmware.com> | 2016-07-01 13:49:30 -0700 |
---|---|---|
committer | Gurucharan Shetty <guru@ovn.org> | 2016-07-01 20:52:29 -0700 |
commit | b50d56a76732d833d7c4ce3cc12b7a200a61bd4b (patch) | |
tree | b6b4e31121199028e644a2afc09039bd5243f88a /datapath-windows/ovsext/Conntrack-tcp.c | |
parent | 78f31c2b4c3e90fb72d7ae4f2cd4211b97709480 (diff) | |
download | openvswitch-b50d56a76732d833d7c4ce3cc12b7a200a61bd4b.tar.gz |
datapath-windows: Add support for dump-conntrack in datapath
Create the methods used for dumping conntrack entries from the hyper-v
datapath to userspace by means of netfilter netlink messages. Some of the
attributes are not supported by the datapath and have been defaulted to 0.
Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
Acked-by: Paul-Daniel Boca <pboca@cloudbasesolutions.com>
Acked-by: Nithin Raju <nithin@vmware.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Conntrack-tcp.c')
-rw-r--r-- | datapath-windows/ovsext/Conntrack-tcp.c | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/Conntrack-tcp.c b/datapath-windows/ovsext/Conntrack-tcp.c index 862972a26..82edc203b 100644 --- a/datapath-windows/ovsext/Conntrack-tcp.c +++ b/datapath-windows/ovsext/Conntrack-tcp.c @@ -516,3 +516,62 @@ OvsConntrackCreateTcpEntry(const TCPHdr *tcp, return &newconn->up; } + +static __inline uint8_t +OvsCtTcpPeerToProtoInfoFlags(const struct tcp_peer *peer) +{ + uint8_t res = 0; + + if (peer->wscale & CT_WSCALE_FLAG) { + res |= CT_DPIF_TCPF_WINDOW_SCALE; + } + + if (peer->wscale & CT_WSCALE_UNKNOWN) { + res |= CT_DPIF_TCPF_BE_LIBERAL; + } + + return res; +} + +NDIS_STATUS +OvsCtMapTcpProtoInfoToNl(PNL_BUFFER nlBuf, OVS_CT_ENTRY *conn_) +{ + struct conn_tcp *conn = OvsCastConntrackEntryToTcpEntry(conn_); + NDIS_STATUS status = NDIS_STATUS_SUCCESS; + UINT32 offset = 0; + + offset = NlMsgStartNested(nlBuf, CTA_PROTOINFO_TCP); + if (!offset) { + return NDIS_STATUS_FAILURE; + } + + if (!NlMsgPutTailU8(nlBuf, CTA_PROTOINFO_TCP_STATE, + conn->peer[0].state)) { + status = NDIS_STATUS_FAILURE; + goto done; + } + if (!NlMsgPutTailU8(nlBuf, CTA_PROTOINFO_TCP_WSCALE_ORIGINAL, + (conn->peer[0].wscale & CT_WSCALE_MASK))) { + status = NDIS_STATUS_FAILURE; + goto done; + } + if (!NlMsgPutTailU8(nlBuf, CTA_PROTOINFO_TCP_WSCALE_REPLY, + (conn->peer[1].wscale & CT_WSCALE_MASK))) { + status = NDIS_STATUS_FAILURE; + goto done; + } + if (!NlMsgPutTailU16(nlBuf, CTA_PROTOINFO_TCP_FLAGS_ORIGINAL, + OvsCtTcpPeerToProtoInfoFlags(&conn->peer[0]))) { + status = NDIS_STATUS_FAILURE; + goto done; + } + if (!NlMsgPutTailU16(nlBuf, CTA_PROTOINFO_TCP_FLAGS_REPLY, + OvsCtTcpPeerToProtoInfoFlags(&conn->peer[1]))) { + status = NDIS_STATUS_FAILURE; + goto done; + } + +done: + NlMsgEndNested(nlBuf, offset); + return status; +} |