- for (i = 0; i < addr_port_pair_num; i++)
- {
- ap = &addr_port_pairs[i];
- memset (&lb_addr_port, 0, sizeof (lb_addr_port));
- clib_memcpy (&lb_addr_port.addr, ap->addr, 4);
- lb_addr_port.port = clib_net_to_host_u16 (ap->port);
- lb_addr_port.probability = ap->probability;
- vec_add1 (lb_addr_port_pairs, lb_addr_port);
- }
+ for (i = 0; i < addr_port_pair_num; i++)
+ {
+ ap = &addr_port_pairs[i];
+ clib_memset (&lb_addr_port, 0, sizeof (lb_addr_port));
+ clib_memcpy (&lb_addr_port.addr, ap->addr, 4);
+ lb_addr_port.port = clib_net_to_host_u16 (ap->port);
+ lb_addr_port.probability = ap->probability;
+ lb_addr_port.vrf_id = clib_net_to_host_u32 (ap->vrf_id);
+ vec_add1 (lb_addr_port_pairs, lb_addr_port);
+ }
+
+ return lb_addr_port_pairs;
+}
+
+static void
+ vl_api_nat44_add_del_lb_static_mapping_t_handler
+ (vl_api_nat44_add_del_lb_static_mapping_t * mp)
+{
+ snat_main_t *sm = &snat_main;
+ vl_api_nat44_add_del_lb_static_mapping_reply_t *rmp;
+ twice_nat_type_t twice_nat = TWICE_NAT_DISABLED;
+ int rv = 0;
+ nat44_lb_addr_port_t *locals = 0;
+ ip4_address_t e_addr;
+ snat_protocol_t proto;
+ u8 *tag = 0;
+
+ if (!sm->endpoint_dependent)
+ {
+ rv = VNET_API_ERROR_UNSUPPORTED;
+ goto send_reply;
+ }
+
+ locals =
+ unformat_nat44_lb_addr_port (mp->locals,
+ clib_net_to_host_u32 (mp->local_num));
+ clib_memcpy (&e_addr, mp->external_addr, 4);
+ proto = ip_proto_to_snat_proto (mp->protocol);
+
+ if (mp->flags & NAT_API_IS_TWICE_NAT)
+ twice_nat = TWICE_NAT;
+ else if (mp->flags & NAT_API_IS_SELF_TWICE_NAT)
+ twice_nat = TWICE_NAT_SELF;
+ mp->tag[sizeof (mp->tag) - 1] = 0;
+ tag = format (0, "%s", mp->tag);
+ vec_terminate_c_string (tag);
+
+ rv =
+ nat44_add_del_lb_static_mapping (e_addr,
+ clib_net_to_host_u16 (mp->external_port),
+ proto, locals, mp->is_add,
+ twice_nat,
+ mp->flags & NAT_API_IS_OUT2IN_ONLY, tag,
+ clib_net_to_host_u32 (mp->affinity));
+
+ vec_free (locals);
+ vec_free (tag);
+
+send_reply:
+ REPLY_MACRO (VL_API_NAT44_ADD_DEL_LB_STATIC_MAPPING_REPLY);
+}
+
+static void *vl_api_nat44_add_del_lb_static_mapping_t_print
+ (vl_api_nat44_add_del_lb_static_mapping_t * mp, void *handle)
+{
+ u8 *s;
+
+ s = format (0, "SCRIPT: nat44_add_del_lb_static_mapping ");
+ s = format (s, "is_add %d twice_nat %d out2in_only %d ",
+ mp->is_add,
+ mp->flags & NAT_API_IS_TWICE_NAT,
+ mp->flags & NAT_API_IS_OUT2IN_ONLY);