Lines Matching refs:cfg

1697 			       const struct fib6_config *cfg)  in ip6_convert_metrics()  argument
1704 if (!cfg->fc_mx) in ip6_convert_metrics()
1711 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in ip6_convert_metrics()
1751 static struct rt6_info *ip6_route_info_create(struct fib6_config *cfg) in ip6_route_info_create() argument
1753 struct net *net = cfg->fc_nlinfo.nl_net; in ip6_route_info_create()
1761 if (cfg->fc_dst_len > 128 || cfg->fc_src_len > 128) in ip6_route_info_create()
1764 if (cfg->fc_src_len) in ip6_route_info_create()
1767 if (cfg->fc_ifindex) { in ip6_route_info_create()
1769 dev = dev_get_by_index(net, cfg->fc_ifindex); in ip6_route_info_create()
1777 if (cfg->fc_metric == 0) in ip6_route_info_create()
1778 cfg->fc_metric = IP6_RT_PRIO_USER; in ip6_route_info_create()
1781 if (cfg->fc_nlinfo.nlh && in ip6_route_info_create()
1782 !(cfg->fc_nlinfo.nlh->nlmsg_flags & NLM_F_CREATE)) { in ip6_route_info_create()
1783 table = fib6_get_table(net, cfg->fc_table); in ip6_route_info_create()
1786 table = fib6_new_table(net, cfg->fc_table); in ip6_route_info_create()
1789 table = fib6_new_table(net, cfg->fc_table); in ip6_route_info_create()
1796 (cfg->fc_flags & RTF_ADDRCONF) ? 0 : DST_NOCOUNT); in ip6_route_info_create()
1803 if (cfg->fc_flags & RTF_EXPIRES) in ip6_route_info_create()
1805 clock_t_to_jiffies(cfg->fc_expires)); in ip6_route_info_create()
1809 if (cfg->fc_protocol == RTPROT_UNSPEC) in ip6_route_info_create()
1810 cfg->fc_protocol = RTPROT_BOOT; in ip6_route_info_create()
1811 rt->rt6i_protocol = cfg->fc_protocol; in ip6_route_info_create()
1813 addr_type = ipv6_addr_type(&cfg->fc_dst); in ip6_route_info_create()
1817 else if (cfg->fc_flags & RTF_LOCAL) in ip6_route_info_create()
1824 if (cfg->fc_encap) { in ip6_route_info_create()
1827 err = lwtunnel_build_state(dev, cfg->fc_encap_type, in ip6_route_info_create()
1828 cfg->fc_encap, AF_INET6, cfg, in ip6_route_info_create()
1843 ipv6_addr_prefix(&rt->rt6i_dst.addr, &cfg->fc_dst, cfg->fc_dst_len); in ip6_route_info_create()
1844 rt->rt6i_dst.plen = cfg->fc_dst_len; in ip6_route_info_create()
1849 ipv6_addr_prefix(&rt->rt6i_src.addr, &cfg->fc_src, cfg->fc_src_len); in ip6_route_info_create()
1850 rt->rt6i_src.plen = cfg->fc_src_len; in ip6_route_info_create()
1853 rt->rt6i_metric = cfg->fc_metric; in ip6_route_info_create()
1858 if ((cfg->fc_flags & RTF_REJECT) || in ip6_route_info_create()
1861 !(cfg->fc_flags & RTF_LOCAL))) { in ip6_route_info_create()
1877 switch (cfg->fc_type) { in ip6_route_info_create()
1891 rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN in ip6_route_info_create()
1892 : (cfg->fc_type == RTN_UNREACHABLE) in ip6_route_info_create()
1901 if (cfg->fc_flags & RTF_GATEWAY) { in ip6_route_info_create()
1905 gw_addr = &cfg->fc_gateway; in ip6_route_info_create()
1934 grt = rt6_lookup(net, gw_addr, NULL, cfg->fc_ifindex, 1); in ip6_route_info_create()
1966 if (!ipv6_addr_any(&cfg->fc_prefsrc)) { in ip6_route_info_create()
1967 if (!ipv6_chk_addr(net, &cfg->fc_prefsrc, dev, 0)) { in ip6_route_info_create()
1971 rt->rt6i_prefsrc.addr = cfg->fc_prefsrc; in ip6_route_info_create()
1976 rt->rt6i_flags = cfg->fc_flags; in ip6_route_info_create()
1983 cfg->fc_nlinfo.nl_net = dev_net(dev); in ip6_route_info_create()
1997 int ip6_route_add(struct fib6_config *cfg) in ip6_route_add() argument
2003 rt = ip6_route_info_create(cfg); in ip6_route_add()
2010 err = ip6_convert_metrics(&mxc, cfg); in ip6_route_add()
2014 err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, &mxc); in ip6_route_add()
2056 static int ip6_route_del(struct fib6_config *cfg) in ip6_route_del() argument
2063 table = fib6_get_table(cfg->fc_nlinfo.nl_net, cfg->fc_table); in ip6_route_del()
2070 &cfg->fc_dst, cfg->fc_dst_len, in ip6_route_del()
2071 &cfg->fc_src, cfg->fc_src_len); in ip6_route_del()
2076 !(cfg->fc_flags & RTF_CACHE)) in ip6_route_del()
2078 if (cfg->fc_ifindex && in ip6_route_del()
2080 rt->dst.dev->ifindex != cfg->fc_ifindex)) in ip6_route_del()
2082 if (cfg->fc_flags & RTF_GATEWAY && in ip6_route_del()
2083 !ipv6_addr_equal(&cfg->fc_gateway, &rt->rt6i_gateway)) in ip6_route_del()
2085 if (cfg->fc_metric && cfg->fc_metric != rt->rt6i_metric) in ip6_route_del()
2090 return __ip6_del_rt(rt, &cfg->fc_nlinfo); in ip6_route_del()
2288 struct fib6_config cfg = { in rt6_add_route_info() local
2299 cfg.fc_table = l3mdev_fib_table_by_index(net, ifindex) ? : RT6_TABLE_INFO; in rt6_add_route_info()
2300 cfg.fc_dst = *prefix; in rt6_add_route_info()
2301 cfg.fc_gateway = *gwaddr; in rt6_add_route_info()
2305 cfg.fc_flags |= RTF_DEFAULT; in rt6_add_route_info()
2307 ip6_route_add(&cfg); in rt6_add_route_info()
2339 struct fib6_config cfg = { in rt6_add_dflt_router() local
2350 cfg.fc_gateway = *gwaddr; in rt6_add_dflt_router()
2352 ip6_route_add(&cfg); in rt6_add_dflt_router()
2383 struct fib6_config *cfg) in rtmsg_to_fib6_config() argument
2385 memset(cfg, 0, sizeof(*cfg)); in rtmsg_to_fib6_config()
2387 cfg->fc_table = l3mdev_fib_table_by_index(net, rtmsg->rtmsg_ifindex) ? in rtmsg_to_fib6_config()
2389 cfg->fc_ifindex = rtmsg->rtmsg_ifindex; in rtmsg_to_fib6_config()
2390 cfg->fc_metric = rtmsg->rtmsg_metric; in rtmsg_to_fib6_config()
2391 cfg->fc_expires = rtmsg->rtmsg_info; in rtmsg_to_fib6_config()
2392 cfg->fc_dst_len = rtmsg->rtmsg_dst_len; in rtmsg_to_fib6_config()
2393 cfg->fc_src_len = rtmsg->rtmsg_src_len; in rtmsg_to_fib6_config()
2394 cfg->fc_flags = rtmsg->rtmsg_flags; in rtmsg_to_fib6_config()
2396 cfg->fc_nlinfo.nl_net = net; in rtmsg_to_fib6_config()
2398 cfg->fc_dst = rtmsg->rtmsg_dst; in rtmsg_to_fib6_config()
2399 cfg->fc_src = rtmsg->rtmsg_src; in rtmsg_to_fib6_config()
2400 cfg->fc_gateway = rtmsg->rtmsg_gateway; in rtmsg_to_fib6_config()
2405 struct fib6_config cfg; in ipv6_route_ioctl() local
2419 rtmsg_to_fib6_config(net, &rtmsg, &cfg); in ipv6_route_ioctl()
2424 err = ip6_route_add(&cfg); in ipv6_route_ioctl()
2427 err = ip6_route_del(&cfg); in ipv6_route_ioctl()
2706 struct fib6_config *cfg) in rtm_to_fib6_config() argument
2719 memset(cfg, 0, sizeof(*cfg)); in rtm_to_fib6_config()
2721 cfg->fc_table = rtm->rtm_table; in rtm_to_fib6_config()
2722 cfg->fc_dst_len = rtm->rtm_dst_len; in rtm_to_fib6_config()
2723 cfg->fc_src_len = rtm->rtm_src_len; in rtm_to_fib6_config()
2724 cfg->fc_flags = RTF_UP; in rtm_to_fib6_config()
2725 cfg->fc_protocol = rtm->rtm_protocol; in rtm_to_fib6_config()
2726 cfg->fc_type = rtm->rtm_type; in rtm_to_fib6_config()
2732 cfg->fc_flags |= RTF_REJECT; in rtm_to_fib6_config()
2735 cfg->fc_flags |= RTF_LOCAL; in rtm_to_fib6_config()
2738 cfg->fc_flags |= RTF_CACHE; in rtm_to_fib6_config()
2740 cfg->fc_nlinfo.portid = NETLINK_CB(skb).portid; in rtm_to_fib6_config()
2741 cfg->fc_nlinfo.nlh = nlh; in rtm_to_fib6_config()
2742 cfg->fc_nlinfo.nl_net = sock_net(skb->sk); in rtm_to_fib6_config()
2745 cfg->fc_gateway = nla_get_in6_addr(tb[RTA_GATEWAY]); in rtm_to_fib6_config()
2746 cfg->fc_flags |= RTF_GATEWAY; in rtm_to_fib6_config()
2755 nla_memcpy(&cfg->fc_dst, tb[RTA_DST], plen); in rtm_to_fib6_config()
2764 nla_memcpy(&cfg->fc_src, tb[RTA_SRC], plen); in rtm_to_fib6_config()
2768 cfg->fc_prefsrc = nla_get_in6_addr(tb[RTA_PREFSRC]); in rtm_to_fib6_config()
2771 cfg->fc_ifindex = nla_get_u32(tb[RTA_OIF]); in rtm_to_fib6_config()
2774 cfg->fc_metric = nla_get_u32(tb[RTA_PRIORITY]); in rtm_to_fib6_config()
2777 cfg->fc_mx = nla_data(tb[RTA_METRICS]); in rtm_to_fib6_config()
2778 cfg->fc_mx_len = nla_len(tb[RTA_METRICS]); in rtm_to_fib6_config()
2782 cfg->fc_table = nla_get_u32(tb[RTA_TABLE]); in rtm_to_fib6_config()
2785 cfg->fc_mp = nla_data(tb[RTA_MULTIPATH]); in rtm_to_fib6_config()
2786 cfg->fc_mp_len = nla_len(tb[RTA_MULTIPATH]); in rtm_to_fib6_config()
2794 cfg->fc_flags |= RTF_PREF(pref); in rtm_to_fib6_config()
2798 cfg->fc_encap = tb[RTA_ENCAP]; in rtm_to_fib6_config()
2801 cfg->fc_encap_type = nla_get_u16(tb[RTA_ENCAP_TYPE]); in rtm_to_fib6_config()
2859 static int ip6_route_multipath_add(struct fib6_config *cfg) in ip6_route_multipath_add() argument
2870 int replace = (cfg->fc_nlinfo.nlh && in ip6_route_multipath_add()
2871 (cfg->fc_nlinfo.nlh->nlmsg_flags & NLM_F_REPLACE)); in ip6_route_multipath_add()
2874 remaining = cfg->fc_mp_len; in ip6_route_multipath_add()
2875 rtnh = (struct rtnexthop *)cfg->fc_mp; in ip6_route_multipath_add()
2881 memcpy(&r_cfg, cfg, sizeof(*cfg)); in ip6_route_multipath_add()
2918 err = __ip6_ins_rt(nh->rt6_info, &cfg->fc_nlinfo, &nh->mxc); in ip6_route_multipath_add()
2935 cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL | in ip6_route_multipath_add()
2962 static int ip6_route_multipath_del(struct fib6_config *cfg) in ip6_route_multipath_del() argument
2970 remaining = cfg->fc_mp_len; in ip6_route_multipath_del()
2971 rtnh = (struct rtnexthop *)cfg->fc_mp; in ip6_route_multipath_del()
2975 memcpy(&r_cfg, cfg, sizeof(*cfg)); in ip6_route_multipath_del()
3001 struct fib6_config cfg; in inet6_rtm_delroute() local
3004 err = rtm_to_fib6_config(skb, nlh, &cfg); in inet6_rtm_delroute()
3008 if (cfg.fc_mp) in inet6_rtm_delroute()
3009 return ip6_route_multipath_del(&cfg); in inet6_rtm_delroute()
3011 return ip6_route_del(&cfg); in inet6_rtm_delroute()
3016 struct fib6_config cfg; in inet6_rtm_newroute() local
3019 err = rtm_to_fib6_config(skb, nlh, &cfg); in inet6_rtm_newroute()
3023 if (cfg.fc_mp) in inet6_rtm_newroute()
3024 return ip6_route_multipath_add(&cfg); in inet6_rtm_newroute()
3026 return ip6_route_add(&cfg); in inet6_rtm_newroute()