+ clib_memset (&args, 0, sizeof (args));
+ fib_proto = mp->is_ip4 ? FIB_PROTOCOL_IP4 : FIB_PROTOCOL_IP6;
+
+ table_args->lcl.fp_len = mp->lcl_plen;
+ table_args->lcl.fp_proto = fib_proto;
+ table_args->rmt.fp_len = mp->rmt_plen;
+ table_args->rmt.fp_proto = fib_proto;
+ table_args->lcl_port = mp->lcl_port;
+ table_args->rmt_port = mp->rmt_port;
+ table_args->action_index = clib_net_to_host_u32 (mp->action_index);
+ table_args->is_add = mp->is_add;
+ mp->tag[sizeof (mp->tag) - 1] = 0;
+ table_args->tag = format (0, "%s", mp->tag);
+ args.appns_index = clib_net_to_host_u32 (mp->appns_index);
+ args.scope = mp->scope;
+ args.transport_proto = mp->transport_proto;
+
+ clib_memset (&table_args->lcl.fp_addr, 0, sizeof (table_args->lcl.fp_addr));
+ clib_memset (&table_args->rmt.fp_addr, 0, sizeof (table_args->rmt.fp_addr));
+ ip_set (&table_args->lcl.fp_addr, mp->lcl_ip, mp->is_ip4);
+ ip_set (&table_args->rmt.fp_addr, mp->rmt_ip, mp->is_ip4);
+ rv = vnet_session_rule_add_del (&args);
+ if (rv)
+ clib_warning ("rule add del returned: %d", rv);
+ vec_free (table_args->tag);
+ REPLY_MACRO (VL_API_SESSION_RULE_ADD_DEL_REPLY);
+}
+
+static void
+send_session_rule_details4 (mma_rule_16_t * rule, u8 is_local,
+ u8 transport_proto, u32 appns_index, u8 * tag,
+ vl_api_registration_t * reg, u32 context)
+{
+ vl_api_session_rules_details_t *rmp = 0;
+ session_mask_or_match_4_t *match =
+ (session_mask_or_match_4_t *) & rule->match;
+ session_mask_or_match_4_t *mask =
+ (session_mask_or_match_4_t *) & rule->mask;
+
+ rmp = vl_msg_api_alloc (sizeof (*rmp));
+ clib_memset (rmp, 0, sizeof (*rmp));
+ rmp->_vl_msg_id = ntohs (VL_API_SESSION_RULES_DETAILS);
+ rmp->context = context;
+
+ rmp->is_ip4 = 1;
+ clib_memcpy_fast (rmp->lcl_ip, &match->lcl_ip, sizeof (match->lcl_ip));
+ clib_memcpy_fast (rmp->rmt_ip, &match->rmt_ip, sizeof (match->rmt_ip));
+ rmp->lcl_plen = ip4_mask_to_preflen (&mask->lcl_ip);
+ rmp->rmt_plen = ip4_mask_to_preflen (&mask->rmt_ip);
+ rmp->lcl_port = match->lcl_port;
+ rmp->rmt_port = match->rmt_port;
+ rmp->action_index = clib_host_to_net_u32 (rule->action_index);
+ rmp->scope =
+ is_local ? SESSION_RULE_SCOPE_LOCAL : SESSION_RULE_SCOPE_GLOBAL;
+ rmp->transport_proto = transport_proto;
+ rmp->appns_index = clib_host_to_net_u32 (appns_index);
+ if (tag)