blob: e56be3386edef4b8dd8d7b3674a3ad34581bb722 [file] [log] [blame]
Dave Barach68b0fb02017-02-28 15:15:56 -05001/*
2 * Copyright (c) 2016 Cisco and/or its affiliates.
3 * Licensed under the Apache License, Version 2.0 (the "License");
4 * you may not use this file except in compliance with the License.
5 * You may obtain a copy of the License at:
6 *
7 * http://www.apache.org/licenses/LICENSE-2.0
8 *
9 * Unless required by applicable law or agreed to in writing, software
10 * distributed under the License is distributed on an "AS IS" BASIS,
11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12 * See the License for the specific language governing permissions and
13 * limitations under the License.
14 */
15
16#ifndef VNET_VNET_URI_TRANSPORT_H_
17#define VNET_VNET_URI_TRANSPORT_H_
18
19#include <vnet/vnet.h>
20#include <vnet/ip/ip.h>
21#include <vppinfra/bihash_16_8.h>
22#include <vppinfra/bihash_48_8.h>
Florin Corase69f4952017-03-07 10:06:24 -080023#include <vnet/tcp/tcp_debug.h>
Florin Coras04e53442017-07-16 17:12:15 -070024
Dave Barach68b0fb02017-02-28 15:15:56 -050025/*
26 * Protocol independent transport properties associated to a session
27 */
28typedef struct _transport_connection
29{
30 ip46_address_t rmt_ip; /**< Remote IP */
31 ip46_address_t lcl_ip; /**< Local IP */
32 u16 lcl_port; /**< Local port */
33 u16 rmt_port; /**< Remote port */
Florin Coras68810622017-07-24 17:40:28 -070034 u8 transport_proto; /**< Protocol id */
35 u8 is_ip4; /**< Flag if IP4 connection */
Florin Coras04e53442017-07-16 17:12:15 -070036 u32 vrf; /**< FIB table id */
Dave Barach68b0fb02017-02-28 15:15:56 -050037
38 u32 s_index; /**< Parent session index */
39 u32 c_index; /**< Connection index in transport pool */
Dave Barach68b0fb02017-02-28 15:15:56 -050040 u32 thread_index; /**< Worker-thread index */
41
Florin Corasf6359c82017-06-19 12:26:09 -040042 fib_node_index_t rmt_fei; /**< FIB entry index for rmt */
43 dpo_id_t rmt_dpo; /**< Forwarding DPO for rmt */
44
Florin Corase69f4952017-03-07 10:06:24 -080045#if TRANSPORT_DEBUG
Florin Coras6792ec02017-03-13 03:49:51 -070046 elog_track_t elog_track; /**< Event logging */
Florin Corasf03a59a2017-06-09 21:07:32 -070047 u32 cc_stat_tstamp; /**< CC stats timestamp */
Florin Corase69f4952017-03-07 10:06:24 -080048#endif
49
Dave Barach68b0fb02017-02-28 15:15:56 -050050 /** Macros for 'derived classes' where base is named "connection" */
51#define c_lcl_ip connection.lcl_ip
52#define c_rmt_ip connection.rmt_ip
53#define c_lcl_ip4 connection.lcl_ip.ip4
54#define c_rmt_ip4 connection.rmt_ip.ip4
55#define c_lcl_ip6 connection.lcl_ip.ip6
56#define c_rmt_ip6 connection.rmt_ip.ip6
57#define c_lcl_port connection.lcl_port
58#define c_rmt_port connection.rmt_port
Florin Coras68810622017-07-24 17:40:28 -070059#define c_transport_proto connection.transport_proto
Florin Coras04e53442017-07-16 17:12:15 -070060#define c_vrf connection.vrf
Dave Barach68b0fb02017-02-28 15:15:56 -050061#define c_state connection.state
62#define c_s_index connection.s_index
63#define c_c_index connection.c_index
64#define c_is_ip4 connection.is_ip4
65#define c_thread_index connection.thread_index
Florin Corase69f4952017-03-07 10:06:24 -080066#define c_elog_track connection.elog_track
Florin Corasf03a59a2017-06-09 21:07:32 -070067#define c_cc_stat_tstamp connection.cc_stat_tstamp
Florin Corasf6359c82017-06-19 12:26:09 -040068#define c_rmt_fei connection.rmt_fei
69#define c_rmt_dpo connection.rmt_dpo
Dave Barach68b0fb02017-02-28 15:15:56 -050070} transport_connection_t;
71
Dave Barach2c25a622017-06-26 11:35:07 -040072typedef enum _transport_proto
73{
74 TRANSPORT_PROTO_TCP,
75 TRANSPORT_PROTO_UDP
76} transport_proto_t;
77
Dave Barach68b0fb02017-02-28 15:15:56 -050078typedef struct _transport_endpoint
79{
Florin Coras6cf30ad2017-04-04 23:08:23 -070080 ip46_address_t ip; /** ip address */
81 u16 port; /** port in host order */
82 u8 is_ip4; /** 1 if ip4 */
83 u32 vrf; /** fib table the endpoint is associated with */
Dave Barach68b0fb02017-02-28 15:15:56 -050084} transport_endpoint_t;
85
Dave Barach68b0fb02017-02-28 15:15:56 -050086#endif /* VNET_VNET_URI_TRANSPORT_H_ */
87
88/*
89 * fd.io coding-style-patch-verification: ON
90 *
91 * Local Variables:
92 * eval: (c-set-style "gnu")
93 * End:
94 */