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
102
103
104
105
106
107
108
109
110
111
112
|
#include <hicn/ctrl/command.h>
/* Parameters */
#define type_hicn \
{ \
.name = "type", .help = "face type (hICN)", .type = TYPE_ENUM(face_type), \
.offset = offsetof(hc_face_t, type), \
}
#define type_tcp_udp \
{ \
.name = "type", .help = "face type [tcp | udp]", \
.type = TYPE_ENUM(face_type), .offset = offsetof(hc_face_t, type), \
}
#define local_address \
{ \
.name = "local_addr", .help = "local IP address on which to bind.", \
.type = TYPE_IP_ADDRESS, .offset = offsetof(hc_face_t, local_addr), \
.offset2 = offsetof(hc_face_t, family), \
}
#define local_port \
{ \
.name = "local_port", .help = "Local port.", \
.type = TYPE_UINT16(1, UINT16_MAX), \
.offset = offsetof(hc_face_t, local_port), \
}
#define remote_address \
{ \
.name = "remote_address", \
.help = "The IPv4 or IPv6 or hostname of the remote system.", \
.type = TYPE_IP_ADDRESS, .offset = offsetof(hc_face_t, remote_addr), \
.offset2 = offsetof(hc_face_t, family), \
}
#define remote_port \
{ \
.name = "remote_port", .help = "Remote port.", \
.type = TYPE_UINT16(1, UINT16_MAX), \
.offset = offsetof(hc_face_t, remote_port), \
}
#define interface \
{ \
.name = "interface", .help = "Interface on which to bind", \
.type = TYPE_INTERFACE_NAME, \
.offset = offsetof(hc_face_t, netdevice) + offsetof(netdevice_t, name), \
}
#define symbolic_or_id \
{ \
.name = "symbolic", .help = "The face symbolic name or id", \
.type = TYPE_SYMBOLIC_OR_ID, .offset = offsetof(hc_face_t, name), \
}
/* Commands */
int on_face_create(hc_face_t* face) {
face->admin_state = FACE_STATE_UP;
return 0;
}
static command_parser_t command_face_create3 = {
.action = ACTION_CREATE,
.object_type = OBJECT_TYPE_FACE,
.nparams = 3,
.parameters = {type_hicn, local_address, remote_address},
.post_hook = (parser_hook_t)on_face_create,
};
COMMAND_REGISTER(command_face_create3);
#if 0
static const command_parser_t command_face_create4 = {
.action = ACTION_CREATE,
.object = OBJECT_TYPE_FACE,
.nparams = 4,
.parameters = {type_hicn, local_address, remote_address,
interface},
.post_hook = (parser_hook_t)on_face_create,
};
COMMAND_REGISTER(command_face_create4);
#endif
static const command_parser_t command_face_create5 = {
.action = ACTION_CREATE,
.object_type = OBJECT_TYPE_FACE,
.nparams = 5,
.parameters = {type_tcp_udp, remote_address, remote_port, local_address,
local_port},
.post_hook = (parser_hook_t)on_face_create,
};
COMMAND_REGISTER(command_face_create5);
static const command_parser_t command_face_create6 = {
.action = ACTION_CREATE,
.object_type = OBJECT_TYPE_FACE,
.nparams = 6,
.parameters = {type_tcp_udp, remote_address, remote_port, local_address,
local_port, interface},
.post_hook = (parser_hook_t)on_face_create,
};
COMMAND_REGISTER(command_face_create6);
static const command_parser_t command_face_list = {
.action = ACTION_LIST,
.object_type = OBJECT_TYPE_FACE,
.nparams = 0,
};
COMMAND_REGISTER(command_face_list);
|