aboutsummaryrefslogtreecommitdiffstats
path: root/hicn-plugin/src/pg.h
blob: 9ec3eeabcf518b2a881f7c8ebb434ec52ab349c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
/*
 * Copyright (c) 2017-2020 Cisco and/or its affiliates.
 * 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.
 */

#ifndef __HICN_PG_H__
#define __HICN_PG_H__


/**
 * @File Packet generator for hICN
 *
 * The packet generator is made of two entities, a client and a server.
 * The client issues interests at high speed and the server satisfy each
 * interest it receives with the corresponding data.
 * The packet generator is made of three nodes:
 * - hicnpg-interest that receives packets from a packet generator interface
 *   and manipulate them to generate interests based on the given configuration.
 *   This node runs at the client side.
 * - hicnpg-data that receives data packets at the client side and counts them.
 *   This is useful for statistics. The "show err" command will give the number
 *   of interest issued and data received at the client side
 * - hicnpg-server that recevies and interest and replies with the corresponding
 *   data. The data is generated from the interest switching the src and destination
 *   address in the packet and appending a payload to the packet.
 *
 *
 * These three nodes are inserted in the vlib graph in the following manner:
 * - hicnpg-interest is added as a possible next node of the pg-input node. The packet
 *   generator stream then specifies it as next node.
 * - hicnpg-data is added as next hop of the ip4/6-unicast node exploiting the corresponding
 *   feature and it runs before the ip4/6-inacl node. In this way, every packet that is
 *   received through an interface on which this feature is enabled is sent to this node.
 * - hicnpg-server is added as next hop of the ip4/6-unicast using the corresponding
 *   feature and it runs before the ip4/6-inacl node. In this way, every packet that is
 *   received through an interface on which this feature is enabled is sent to this node.
 *
 * An example of how to use the pg for hicn is available in the documentation.
 */

/**
 * @brief hICN packet generator main for the pg client nodes
 *
 * It stores the configuration and make it availables to the pg client nodes.
 */
typedef struct hicnpg_main_s
{
  u32 index;			//used to compute the sequence number
  fib_prefix_t *pgen_clt_hicn_name;	//hICN name to put in the destiantion addess of an interest
  u32 index_ifaces;		/* used to mimic interests coming from different consumer */
  u32 n_ifaces;			/* The source address will change from interest to interest */
  /* index_ifaces is used to keep a global reference to the iface used */
  /* and it is incremented when we want to change "consumer" */
  /* n_ifaces identifies how many consumers to simulate */
  u32 max_seq_number;		//Use to limit the max sequence number
  u32 n_flows;			//Use to simulate multiple flows (a flow always have the same hICN name)
  ip46_address_t pgen_clt_src_addr;	//Source addess base to use in the interest

  u16 interest_lifetime;	// Interest lifetime
  u32 sw_if;			//Interface where to send interest and receives data
} hicnpg_main_t;

extern hicnpg_main_t hicnpg_main;

/**
 * @brief hICN packet generator main for the pg server node
 *
 * It stores the configuration and make it availables to the pg server node.
 */
typedef struct hicnpg_server_main_s
{
  u32 node_index;
  /* Arbitrary content */
  u32 pgen_svr_buffer_idx;
  fib_prefix_t *pgen_srv_hicn_name;
} hicnpg_server_main_t;

extern hicnpg_server_main_t hicnpg_server_main;

extern vlib_node_registration_t hicn_pg_interest_node;
extern vlib_node_registration_t hicn_pg_data_node;

#endif // __HICN_PG_H__

/*
 * fd.io coding-style-patch-verification: ON
 *
 * Local Variables:
 * eval: (c-set-style "gnu")
 * End:
 */