diff options
author | Sairam Venugopal <vsairam@vmware.com> | 2016-06-20 18:15:22 -0700 |
---|---|---|
committer | Gurucharan Shetty <guru@ovn.org> | 2016-06-24 14:27:15 -0700 |
commit | 5b37c6aea56eda2f754b6246aa12bb264aeb107c (patch) | |
tree | 23c1bd601530615fb78f3913ca120d534a06f0f1 /datapath-windows/ovsext/Conntrack-other.c | |
parent | b1048e6af164ff6946ade8118adfc5a0f2c980d5 (diff) | |
download | openvswitch-5b37c6aea56eda2f754b6246aa12bb264aeb107c.tar.gz |
datapath-windows: Add support for UDP and ICMP to Conntrack Module
Enable support for UDP and ICMP in the connection tracking module on
Hyper-V. Define 1s as variable and reuse it.
Signed-off-by: Sairam Venugopal <vsairam@vmware.com>
Acked-by: Alin Gabriel Serdean <aserdean@cloudbasesolutions.com>
Signed-off-by: Gurucharan Shetty <guru@ovn.org>
Diffstat (limited to 'datapath-windows/ovsext/Conntrack-other.c')
-rw-r--r-- | datapath-windows/ovsext/Conntrack-other.c | 82 |
1 files changed, 82 insertions, 0 deletions
diff --git a/datapath-windows/ovsext/Conntrack-other.c b/datapath-windows/ovsext/Conntrack-other.c new file mode 100644 index 000000000..5d393892f --- /dev/null +++ b/datapath-windows/ovsext/Conntrack-other.c @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2015, 2016 VMware, Inc. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "Conntrack.h" +#include <stddef.h> + +enum other_state { + OTHERS_FIRST, + OTHERS_MULTIPLE, + OTHERS_BIDIR, +}; + +struct conn_other { + struct OVS_CT_ENTRY up; + enum other_state state; +}; + +static const long long other_timeouts[] = { + [OTHERS_FIRST] = 60 * CT_INTERVAL_SEC, + [OTHERS_MULTIPLE] = 60 * CT_INTERVAL_SEC, + [OTHERS_BIDIR] = 30 * CT_INTERVAL_SEC, +}; + +static __inline struct conn_other* +OvsCastConntrackEntryToOtherEntry(OVS_CT_ENTRY *conn) +{ + ASSERT(conn); + return CONTAINER_OF(conn, struct conn_other, up); +} + +static __inline VOID +OvsConntrackUpdateExpiration(struct conn_other *conn, long long now) +{ + ASSERT(conn); + conn->up.expiration = now + other_timeouts[conn->state]; +} + +enum ct_update_res +OvsConntrackUpdateOtherEntry(OVS_CT_ENTRY *conn_, + BOOLEAN reply, + UINT64 now) +{ + ASSERT(conn_); + struct conn_other *conn = OvsCastConntrackEntryToOtherEntry(conn_); + + if (reply && conn->state != OTHERS_BIDIR) { + conn->state = OTHERS_BIDIR; + } else if (conn->state == OTHERS_FIRST) { + conn->state = OTHERS_MULTIPLE; + } + + OvsConntrackUpdateExpiration(conn, now); + + return CT_UPDATE_VALID; +} + +OVS_CT_ENTRY * +OvsConntrackCreateOtherEntry(UINT64 now) +{ + struct conn_other *conn; + conn = OvsAllocateMemoryWithTag(sizeof(struct conn_other), + OVS_CT_POOL_TAG); + /* XXX Handle memory allocation error (by returning a status) */ + ASSERT(conn); + conn->up = (OVS_CT_ENTRY) {0}; + conn->state = OTHERS_FIRST; + OvsConntrackUpdateExpiration(conn, now); + return &conn->up; +} |