Lines Matching refs:info
243 const struct ovs_conntrack_info *info, in ovs_ct_update_key() argument
274 if (info) in ovs_ct_update_key()
275 zone = &info->zone; in ovs_ct_update_key()
535 const struct ovs_conntrack_info *info, in ovs_ct_executed() argument
549 (key->ct_zone == info->zone.id); in ovs_ct_executed()
551 if (*ct_executed || (!key->ct_state && info->force)) { in ovs_ct_executed()
552 ct = ovs_ct_find_existing(net, &info->zone, info->family, skb, in ovs_ct_executed()
563 const struct ovs_conntrack_info *info, in skb_nfct_cached() argument
572 ct = ovs_ct_executed(net, key, info, skb, &ct_executed); in skb_nfct_cached()
581 if (!nf_ct_zone_equal_any(info->ct, nf_ct_zone(ct))) in skb_nfct_cached()
583 if (info->helper) { in skb_nfct_cached()
587 if (help && rcu_access_pointer(help->helper) != info->helper) in skb_nfct_cached()
590 if (info->nf_ct_timeout) { in skb_nfct_cached()
594 if (!timeout_ext || info->nf_ct_timeout != in skb_nfct_cached()
599 if (info->force && CTINFO2DIR(ctinfo) != IP_CT_DIR_ORIGINAL) { in skb_nfct_cached()
668 const struct ovs_conntrack_info *info, in ovs_ct_nat() argument
674 if (!(info->nat & OVS_CT_NAT)) in ovs_ct_nat()
676 if (info->nat & OVS_CT_SRC_NAT) in ovs_ct_nat()
678 if (info->nat & OVS_CT_DST_NAT) in ovs_ct_nat()
681 err = nf_ct_nat(skb, ct, ctinfo, &action, &info->range, info->commit); in ovs_ct_nat()
694 const struct ovs_conntrack_info *info, in ovs_ct_nat() argument
725 const struct ovs_conntrack_info *info, in __ovs_ct_lookup() argument
733 bool cached = skb_nfct_cached(net, key, info, skb); in __ovs_ct_lookup()
740 .pf = info->family, in __ovs_ct_lookup()
743 struct nf_conn *tmpl = info->ct; in __ovs_ct_lookup()
765 ovs_ct_update_key(skb, info, key, true, true); in __ovs_ct_lookup()
782 if (info->nat && !(key->ct_state & OVS_CS_F_NAT_MASK) && in __ovs_ct_lookup()
783 (nf_ct_is_confirmed(ct) || info->commit)) { in __ovs_ct_lookup()
784 int err = ovs_ct_nat(net, key, info, skb, ct, ctinfo); in __ovs_ct_lookup()
797 if (!nf_ct_is_confirmed(ct) && info->commit && in __ovs_ct_lookup()
798 info->helper && !nfct_help(ct)) { in __ovs_ct_lookup()
799 int err = __nf_ct_try_assign_helper(ct, info->ct, in __ovs_ct_lookup()
806 if (info->nat && !nfct_seqadj(ct)) { in __ovs_ct_lookup()
819 info->commit)) { in __ovs_ct_lookup()
820 int err = nf_ct_helper(skb, ct, ctinfo, info->family); in __ovs_ct_lookup()
843 const struct ovs_conntrack_info *info, in ovs_ct_lookup() argument
849 err = __ovs_ct_lookup(net, key, info, skb); in ovs_ct_lookup()
873 const struct ovs_ct_limit_info *info, u16 zone) in ct_limit_hash_bucket() argument
875 return &info->limits[zone & (CT_LIMIT_HASH_BUCKETS - 1)]; in ct_limit_hash_bucket()
879 static void ct_limit_set(const struct ovs_ct_limit_info *info, in ct_limit_set() argument
885 head = ct_limit_hash_bucket(info, new_ct_limit->zone); in ct_limit_set()
899 static void ct_limit_del(const struct ovs_ct_limit_info *info, u16 zone) in ct_limit_del() argument
905 head = ct_limit_hash_bucket(info, zone); in ct_limit_del()
916 static u32 ct_limit_get(const struct ovs_ct_limit_info *info, u16 zone) in ct_limit_get() argument
921 head = ct_limit_hash_bucket(info, zone); in ct_limit_get()
927 return info->default_limit; in ct_limit_get()
931 const struct ovs_conntrack_info *info, in ovs_ct_check_limit() argument
939 conncount_key = info->zone.id; in ovs_ct_check_limit()
941 per_zone_limit = ct_limit_get(ct_limit_info, info->zone.id); in ovs_ct_check_limit()
946 &conncount_key, tuple, &info->zone); in ovs_ct_check_limit()
956 const struct ovs_conntrack_info *info, in ovs_ct_commit() argument
963 err = __ovs_ct_lookup(net, key, info, skb); in ovs_ct_commit()
975 err = ovs_ct_check_limit(net, info, in ovs_ct_commit()
980 info->zone.id); in ovs_ct_commit()
994 if (info->have_eventmask) { in ovs_ct_commit()
998 cache->ctmask = info->eventmask; in ovs_ct_commit()
1005 if (info->mark.mask) { in ovs_ct_commit()
1006 err = ovs_ct_set_mark(ct, key, info->mark.value, in ovs_ct_commit()
1007 info->mark.mask); in ovs_ct_commit()
1012 err = ovs_ct_init_labels(ct, key, &info->labels.value, in ovs_ct_commit()
1013 &info->labels.mask); in ovs_ct_commit()
1019 labels_nonzero(&info->labels.mask)) { in ovs_ct_commit()
1020 err = ovs_ct_set_labels(ct, key, &info->labels.value, in ovs_ct_commit()
1021 &info->labels.mask); in ovs_ct_commit()
1038 const struct ovs_conntrack_info *info) in ovs_ct_execute() argument
1047 err = nf_ct_skb_network_trim(skb, info->family); in ovs_ct_execute()
1054 err = ovs_ct_handle_fragments(net, key, info->zone.id, in ovs_ct_execute()
1055 info->family, skb); in ovs_ct_execute()
1060 if (info->commit) in ovs_ct_execute()
1061 err = ovs_ct_commit(net, key, info, skb); in ovs_ct_execute()
1063 err = ovs_ct_lookup(net, key, info, skb); in ovs_ct_execute()
1093 struct ovs_conntrack_info *info, bool log) in parse_nat() argument
1099 bool ip_vers = (info->family == NFPROTO_IPV6); in parse_nat()
1133 if (info->nat) { in parse_nat()
1137 info->nat |= OVS_CT_NAT; in parse_nat()
1138 info->nat |= ((type == OVS_NAT_ATTR_SRC) in parse_nat()
1143 nla_memcpy(&info->range.min_addr, a, in parse_nat()
1144 sizeof(info->range.min_addr)); in parse_nat()
1145 info->range.flags |= NF_NAT_RANGE_MAP_IPS; in parse_nat()
1150 nla_memcpy(&info->range.max_addr, a, in parse_nat()
1151 sizeof(info->range.max_addr)); in parse_nat()
1152 info->range.flags |= NF_NAT_RANGE_MAP_IPS; in parse_nat()
1156 info->range.min_proto.all = htons(nla_get_u16(a)); in parse_nat()
1157 info->range.flags |= NF_NAT_RANGE_PROTO_SPECIFIED; in parse_nat()
1162 info->range.max_proto.all = htons(nla_get_u16(a)); in parse_nat()
1163 info->range.flags |= NF_NAT_RANGE_PROTO_SPECIFIED; in parse_nat()
1167 info->range.flags |= NF_NAT_RANGE_PERSISTENT; in parse_nat()
1171 info->range.flags |= NF_NAT_RANGE_PROTO_RANDOM; in parse_nat()
1175 info->range.flags |= NF_NAT_RANGE_PROTO_RANDOM_FULLY; in parse_nat()
1188 if (!info->nat) { in parse_nat()
1190 if (info->range.flags) { in parse_nat()
1196 info->nat = OVS_CT_NAT; /* NAT existing connections. */ in parse_nat()
1197 } else if (!info->commit) { in parse_nat()
1204 if (info->range.flags & NF_NAT_RANGE_MAP_IPS && !have_ip_max) { in parse_nat()
1205 memcpy(&info->range.max_addr, &info->range.min_addr, in parse_nat()
1206 sizeof(info->range.max_addr)); in parse_nat()
1209 if (info->range.flags & NF_NAT_RANGE_PROTO_SPECIFIED && in parse_nat()
1211 info->range.max_proto.all = info->range.min_proto.all; in parse_nat()
1238 static int parse_ct(const struct nlattr *attr, struct ovs_conntrack_info *info, in parse_ct() argument
1267 info->force = true; in parse_ct()
1270 info->commit = true; in parse_ct()
1274 info->zone.id = nla_get_u16(a); in parse_ct()
1285 info->mark = *mark; in parse_ct()
1297 info->labels = *labels; in parse_ct()
1310 int err = parse_nat(a, info, log); in parse_ct()
1318 info->have_eventmask = true; in parse_ct()
1319 info->eventmask = nla_get_u32(a); in parse_ct()
1323 memcpy(info->timeout, nla_data(a), nla_len(a)); in parse_ct()
1324 if (!string_is_terminated(info->timeout, nla_len(a))) { in parse_ct()
1339 if (!info->commit && info->mark.mask) { in parse_ct()
1346 if (!info->commit && labels_nonzero(&info->labels.mask)) { in parse_ct()
1447 static bool ovs_ct_nat_to_attr(const struct ovs_conntrack_info *info, in ovs_ct_nat_to_attr() argument
1456 if (info->nat & OVS_CT_SRC_NAT) { in ovs_ct_nat_to_attr()
1459 } else if (info->nat & OVS_CT_DST_NAT) { in ovs_ct_nat_to_attr()
1466 if (info->range.flags & NF_NAT_RANGE_MAP_IPS) { in ovs_ct_nat_to_attr()
1468 info->family == NFPROTO_IPV4) { in ovs_ct_nat_to_attr()
1470 info->range.min_addr.ip) || in ovs_ct_nat_to_attr()
1471 (info->range.max_addr.ip in ovs_ct_nat_to_attr()
1472 != info->range.min_addr.ip && in ovs_ct_nat_to_attr()
1474 info->range.max_addr.ip)))) in ovs_ct_nat_to_attr()
1477 info->family == NFPROTO_IPV6) { in ovs_ct_nat_to_attr()
1479 &info->range.min_addr.in6) || in ovs_ct_nat_to_attr()
1480 (memcmp(&info->range.max_addr.in6, in ovs_ct_nat_to_attr()
1481 &info->range.min_addr.in6, in ovs_ct_nat_to_attr()
1482 sizeof(info->range.max_addr.in6)) && in ovs_ct_nat_to_attr()
1484 &info->range.max_addr.in6)))) in ovs_ct_nat_to_attr()
1490 if (info->range.flags & NF_NAT_RANGE_PROTO_SPECIFIED && in ovs_ct_nat_to_attr()
1492 ntohs(info->range.min_proto.all)) || in ovs_ct_nat_to_attr()
1493 (info->range.max_proto.all != info->range.min_proto.all && in ovs_ct_nat_to_attr()
1495 ntohs(info->range.max_proto.all))))) in ovs_ct_nat_to_attr()
1498 if (info->range.flags & NF_NAT_RANGE_PERSISTENT && in ovs_ct_nat_to_attr()
1501 if (info->range.flags & NF_NAT_RANGE_PROTO_RANDOM && in ovs_ct_nat_to_attr()
1504 if (info->range.flags & NF_NAT_RANGE_PROTO_RANDOM_FULLY && in ovs_ct_nat_to_attr()
1620 const struct ovs_ct_limit_info *info = ovs_net->ct_limit_info; in ovs_ct_limit_exit() local
1623 nf_conncount_destroy(net, info->data); in ovs_ct_limit_exit()
1625 struct hlist_head *head = &info->limits[i]; in ovs_ct_limit_exit()
1632 kfree(info->limits); in ovs_ct_limit_exit()
1633 kfree(info); in ovs_ct_limit_exit()
1637 ovs_ct_limit_cmd_reply_start(struct genl_info *info, u8 cmd, in ovs_ct_limit_cmd_reply_start() argument
1640 struct ovs_header *ovs_header = genl_info_userhdr(info); in ovs_ct_limit_cmd_reply_start()
1647 *ovs_reply_header = genlmsg_put(skb, info->snd_portid, in ovs_ct_limit_cmd_reply_start()
1648 info->snd_seq, in ovs_ct_limit_cmd_reply_start()
1670 struct ovs_ct_limit_info *info) in ovs_ct_limit_set_zone_limit() argument
1683 info->default_limit = zone_limit->limit; in ovs_ct_limit_set_zone_limit()
1700 ct_limit_set(info, ct_limit); in ovs_ct_limit_set_zone_limit()
1715 struct ovs_ct_limit_info *info) in ovs_ct_limit_del_zone_limit() argument
1728 info->default_limit = OVS_CT_LIMIT_DEFAULT; in ovs_ct_limit_del_zone_limit()
1735 ct_limit_del(info, zone); in ovs_ct_limit_del_zone_limit()
1749 static int ovs_ct_limit_get_default_limit(struct ovs_ct_limit_info *info, in ovs_ct_limit_get_default_limit() argument
1754 .limit = info->default_limit, in ovs_ct_limit_get_default_limit()
1780 struct ovs_ct_limit_info *info, in ovs_ct_limit_get_zone_limit() argument
1794 err = ovs_ct_limit_get_default_limit(info, reply); in ovs_ct_limit_get_zone_limit()
1802 limit = ct_limit_get(info, zone); in ovs_ct_limit_get_zone_limit()
1806 net, info->data, zone, limit, reply); in ovs_ct_limit_get_zone_limit()
1822 struct ovs_ct_limit_info *info, in ovs_ct_limit_get_all_zone_limit() argument
1829 err = ovs_ct_limit_get_default_limit(info, reply); in ovs_ct_limit_get_all_zone_limit()
1835 head = &info->limits[i]; in ovs_ct_limit_get_all_zone_limit()
1837 err = __ovs_ct_limit_get_zone_limit(net, info->data, in ovs_ct_limit_get_all_zone_limit()
1849 static int ovs_ct_limit_cmd_set(struct sk_buff *skb, struct genl_info *info) in ovs_ct_limit_cmd_set() argument
1851 struct nlattr **a = info->attrs; in ovs_ct_limit_cmd_set()
1858 reply = ovs_ct_limit_cmd_reply_start(info, OVS_CT_LIMIT_CMD_SET, in ovs_ct_limit_cmd_set()
1876 return genlmsg_reply(reply, info); in ovs_ct_limit_cmd_set()
1883 static int ovs_ct_limit_cmd_del(struct sk_buff *skb, struct genl_info *info) in ovs_ct_limit_cmd_del() argument
1885 struct nlattr **a = info->attrs; in ovs_ct_limit_cmd_del()
1892 reply = ovs_ct_limit_cmd_reply_start(info, OVS_CT_LIMIT_CMD_DEL, in ovs_ct_limit_cmd_del()
1908 return genlmsg_reply(reply, info); in ovs_ct_limit_cmd_del()
1915 static int ovs_ct_limit_cmd_get(struct sk_buff *skb, struct genl_info *info) in ovs_ct_limit_cmd_get() argument
1917 struct nlattr **a = info->attrs; in ovs_ct_limit_cmd_get()
1926 reply = ovs_ct_limit_cmd_reply_start(info, OVS_CT_LIMIT_CMD_GET, in ovs_ct_limit_cmd_get()
1952 return genlmsg_reply(reply, info); in ovs_ct_limit_cmd_get()