#include <vnet/api_errno.h>
#include <vnet/flow/flow.h>
#include <vnet/fib/fib_table.h>
+#include <vnet/udp/udp_local.h>
#include <vnet/tunnel/tunnel_types_api.h>
#include <vnet/ip/ip_types_api.h>
#include <vnet/vnet_msg_enum.h>
vnet_port->mask = ntohs (vl_api_port->mask);
}
+static inline void
+ipv4_flow_convert (vl_api_flow_ip4_t *vl_api_flow, vnet_flow_ip4_t *f)
+{
+ ipv4_addr_and_mask_convert (&vl_api_flow->src_addr, &f->src_addr);
+ ipv4_addr_and_mask_convert (&vl_api_flow->dst_addr, &f->dst_addr);
+
+ protocol_and_mask_convert (&vl_api_flow->protocol, &f->protocol);
+}
+
+static void
+ipv6_flow_convert (vl_api_flow_ip6_t *vl_api_flow, vnet_flow_ip6_t *f)
+{
+ ipv6_addr_and_mask_convert (&vl_api_flow->src_addr, &f->src_addr);
+ ipv6_addr_and_mask_convert (&vl_api_flow->dst_addr, &f->dst_addr);
+
+ protocol_and_mask_convert (&vl_api_flow->protocol, &f->protocol);
+}
+
static inline void
ipv4_n_tuple_flow_convert (vl_api_flow_ip4_n_tuple_t * vl_api_flow,
vnet_flow_ip4_n_tuple_t * f)
f->spi = ntohl (vl_api_flow->spi);
}
+static inline void
+ipv4_vxlan_flow_convert (vl_api_flow_ip4_vxlan_t *vl_api_flow,
+ vnet_flow_ip4_vxlan_t *f)
+{
+ ipv4_addr_and_mask_convert (&vl_api_flow->src_addr, &f->src_addr);
+ ipv4_addr_and_mask_convert (&vl_api_flow->dst_addr, &f->dst_addr);
+ protocol_and_mask_convert (&vl_api_flow->protocol, &f->protocol);
+
+ port_and_mask_convert (&vl_api_flow->src_port, &f->src_port);
+ port_and_mask_convert (&vl_api_flow->dst_port, &f->dst_port);
+
+ f->vni = ntohs (vl_api_flow->vni);
+}
+
+static inline void
+ipv6_vxlan_flow_convert (vl_api_flow_ip6_vxlan_t *vl_api_flow,
+ vnet_flow_ip6_vxlan_t *f)
+{
+ ipv6_addr_and_mask_convert (&vl_api_flow->src_addr, &f->src_addr);
+ ipv6_addr_and_mask_convert (&vl_api_flow->dst_addr, &f->dst_addr);
+ protocol_and_mask_convert (&vl_api_flow->protocol, &f->protocol);
+
+ port_and_mask_convert (&vl_api_flow->src_port, &f->src_port);
+ port_and_mask_convert (&vl_api_flow->dst_port, &f->dst_port);
+
+ f->vni = ntohs (vl_api_flow->vni);
+}
+
static inline void
ipv4_gtpu_flow_convert (vl_api_flow_ip4_gtpu_t * vl_api_flow,
vnet_flow_ip4_gtpu_t * f)
switch (flow.type)
{
+ case VNET_FLOW_TYPE_IP4:
+ ipv4_flow_convert (&f->flow.ip4, &flow.ip4);
+ break;
+ case VNET_FLOW_TYPE_IP6:
+ ipv6_flow_convert (&f->flow.ip6, &flow.ip6);
+ break;
case VNET_FLOW_TYPE_IP4_N_TUPLE:
ipv4_n_tuple_flow_convert (&f->flow.ip4_n_tuple, &flow.ip4_n_tuple);
break;
case VNET_FLOW_TYPE_IP4_IPSEC_AH:
ipv4_ipsec_ah_flow_convert (&f->flow.ip4_ipsec_ah, &flow.ip4_ipsec_ah);
break;
+ case VNET_FLOW_TYPE_IP4_VXLAN:
+ ipv4_vxlan_flow_convert (&f->flow.ip4_vxlan, &flow.ip4_vxlan);
+ break;
+ case VNET_FLOW_TYPE_IP6_VXLAN:
+ ipv6_vxlan_flow_convert (&f->flow.ip6_vxlan, &flow.ip6_vxlan);
+ break;
case VNET_FLOW_TYPE_IP4_GTPU:
ipv4_gtpu_flow_convert (&f->flow.ip4_gtpu, &flow.ip4_gtpu);
break;
({
rmp->flow_index = ntohl (flow_index);
}));
+ /* *INDENT-ON* */
}
static void
vl_api_flow_add_reply_t *rmp;
int rv = 0;
- vnet_main_t *vnm = vnet_get_main();
- rv = vnet_flow_del(vnm, ntohl(mp->flow_index));
+ vnet_main_t *vnm = vnet_get_main ();
+ rv = vnet_flow_del (vnm, ntohl (mp->flow_index));
REPLY_MACRO (VL_API_FLOW_DEL_REPLY);
}
vl_api_flow_add_reply_t *rmp;
int rv = 0;
- vnet_main_t *vnm = vnet_get_main();
- rv = vnet_flow_enable(vnm, ntohl(mp->flow_index), ntohl(mp->hw_if_index));
+ vnet_main_t *vnm = vnet_get_main ();
+ rv =
+ vnet_flow_enable (vnm, ntohl (mp->flow_index), ntohl (mp->hw_if_index));
REPLY_MACRO (VL_API_FLOW_ENABLE_REPLY);
}
vl_api_flow_add_reply_t *rmp;
int rv = 0;
- vnet_main_t *vnm = vnet_get_main();
- rv = vnet_flow_disable(vnm, ntohl(mp->flow_index), ntohl(mp->hw_if_index));
+ vnet_main_t *vnm = vnet_get_main ();
+ rv =
+ vnet_flow_disable (vnm, ntohl (mp->flow_index), ntohl (mp->hw_if_index));
REPLY_MACRO (VL_API_FLOW_DISABLE_REPLY);
}