1 ;;; tunnel-h-skel.el - tunnel encap header file skeleton
5 (define-skeleton skel-tunnel-h
6 "Insert a tunnel encap header file"
8 '(setq encap_stack (skeleton-read "encap_stack (e.g ip4_udp_lisp): "))
9 '(setq ENCAP_STACK (upcase encap_stack))
10 '(setq encap-stack (replace-regexp-in-string "_" "-" encap_stack))
12 #ifndef included_vnet_" encap_stack "_h
13 #define included_vnet_" encap_stack "_h
15 #include <vppinfra/error.h>
16 #include <vppinfra/hash.h>
17 #include <vnet/vnet.h>
18 #include <vnet/ip/ip.h>
19 #include <vnet/l2/l2_input.h>
20 #include <vnet/ethernet/ethernet.h>
21 #include <vnet/" encap-stack "/" encap_stack "_packet.h>
22 #include <vnet/ip/ip4_packet.h>
23 #include <vnet/ip/udp.h>
25 /* Encap stack built in encap.c */
26 typedef CLIB_PACKED (struct {
27 ip4_header_t ip4; /* 20 bytes */
28 udp_header_t udp; /* 8 bytes */
29 " encap_stack "_header_t lisp; /* 8 bytes */
30 }) " encap_stack "_header_t;
32 typedef CLIB_PACKED(struct {
35 * all fields in NET byte order
39 u32 FIXME_NET_BYTE_ORDER;
43 }) " encap_stack "_tunnel_key_t;
46 /* Rewrite string. $$$$ maybe: embed vnet_rewrite header */
49 /* decap next index */
52 /* tunnel src and dst addresses */
57 u32 encap_fib_index; /* tunnel partner lookup here */
58 u32 decap_fib_index; /* inner IP lookup here */
60 /* vnet intfc hw/sw_if_index */
63 /* encap header fields in HOST byte order */
65 } " encap_stack "_tunnel_t;
67 #define foreach_" encap_stack "_input_next \\
68 _(DROP, \"error-drop\") \\
69 _(IP4_INPUT, \"ip4-input\") \\
70 _(IP6_INPUT, \"ip6-input\") \\
71 _(ETHERNET_INPUT, \"ethernet-input\") \\
72 _(" ENCAP_STACK "_ENCAP, \"" encap-stack "-encap\")
75 #define _(s,n) " ENCAP_STACK "_INPUT_NEXT_##s,
76 foreach_" encap_stack "_input_next
78 " ENCAP_STACK "_INPUT_N_NEXT,
79 } " encap_stack "_input_next_t;
82 #define " encap_stack "_error(n,s) " ENCAP_STACK "_ERROR_##n,
83 #include <vnet/" encap-stack "/" encap_stack "_error.def>
84 #undef " encap_stack "_error
85 " ENCAP_STACK "_N_ERROR,
86 } " encap_stack "_input_error_t;
89 /* vector of encap tunnel instances */
90 " encap_stack "_tunnel_t *tunnels;
92 /* lookup tunnel by key */
93 uword * " encap_stack "_tunnel_by_key;
95 /* Free vlib hw_if_indices */
96 u32 * free_" encap_stack "_tunnel_hw_if_indices;
99 vlib_main_t * vlib_main;
100 vnet_main_t * vnet_main;
101 } " encap_stack "_main_t;
103 " encap_stack "_main_t " encap_stack "_main;
105 vlib_node_registration_t " encap_stack "_input_node;
106 vlib_node_registration_t " encap_stack "_encap_node;
108 u8 * format_" encap_stack "_encap_trace (u8 * s, va_list * args);
109 u8 * format_" encap_stack "_header_with_length (u8 * s, va_list * args);
113 ip4_address_t src, dst;
116 u32 decap_next_index;
117 /* encap fields in HOST byte order */
118 u8 FIXME_HOST_BYTE_ORDER;
119 } vnet_" encap_stack "_add_del_tunnel_args_t;
121 int vnet_" encap_stack "_add_del_tunnel
122 (vnet_" encap_stack "_add_del_tunnel_args_t *a, u32 * hw_if_indexp);
124 u8 * format_" encap_stack "_header_with_length (u8 * s, va_list * args);
126 #endif /* included_vnet_" encap_stack "_h */