Lines Matching refs:cfg
1471 const struct fib6_config *cfg) in ip6_convert_metrics() argument
1477 if (!cfg->fc_mx) in ip6_convert_metrics()
1484 nla_for_each_attr(nla, cfg->fc_mx, cfg->fc_mx_len, remaining) { in ip6_convert_metrics()
1516 int ip6_route_info_create(struct fib6_config *cfg, struct rt6_info **rt_ret) in ip6_route_info_create() argument
1519 struct net *net = cfg->fc_nlinfo.nl_net; in ip6_route_info_create()
1526 if (cfg->fc_dst_len > 128 || cfg->fc_src_len > 128) in ip6_route_info_create()
1529 if (cfg->fc_src_len) in ip6_route_info_create()
1532 if (cfg->fc_ifindex) { in ip6_route_info_create()
1534 dev = dev_get_by_index(net, cfg->fc_ifindex); in ip6_route_info_create()
1542 if (cfg->fc_metric == 0) in ip6_route_info_create()
1543 cfg->fc_metric = IP6_RT_PRIO_USER; in ip6_route_info_create()
1546 if (cfg->fc_nlinfo.nlh && in ip6_route_info_create()
1547 !(cfg->fc_nlinfo.nlh->nlmsg_flags & NLM_F_CREATE)) { in ip6_route_info_create()
1548 table = fib6_get_table(net, cfg->fc_table); in ip6_route_info_create()
1551 table = fib6_new_table(net, cfg->fc_table); in ip6_route_info_create()
1554 table = fib6_new_table(net, cfg->fc_table); in ip6_route_info_create()
1560 rt = ip6_dst_alloc(net, NULL, (cfg->fc_flags & RTF_ADDRCONF) ? 0 : DST_NOCOUNT, table); in ip6_route_info_create()
1567 if (cfg->fc_flags & RTF_EXPIRES) in ip6_route_info_create()
1569 clock_t_to_jiffies(cfg->fc_expires)); in ip6_route_info_create()
1573 if (cfg->fc_protocol == RTPROT_UNSPEC) in ip6_route_info_create()
1574 cfg->fc_protocol = RTPROT_BOOT; in ip6_route_info_create()
1575 rt->rt6i_protocol = cfg->fc_protocol; in ip6_route_info_create()
1577 addr_type = ipv6_addr_type(&cfg->fc_dst); in ip6_route_info_create()
1581 else if (cfg->fc_flags & RTF_LOCAL) in ip6_route_info_create()
1588 ipv6_addr_prefix(&rt->rt6i_dst.addr, &cfg->fc_dst, cfg->fc_dst_len); in ip6_route_info_create()
1589 rt->rt6i_dst.plen = cfg->fc_dst_len; in ip6_route_info_create()
1596 ipv6_addr_prefix(&rt->rt6i_src.addr, &cfg->fc_src, cfg->fc_src_len); in ip6_route_info_create()
1597 rt->rt6i_src.plen = cfg->fc_src_len; in ip6_route_info_create()
1600 rt->rt6i_metric = cfg->fc_metric; in ip6_route_info_create()
1605 if ((cfg->fc_flags & RTF_REJECT) || in ip6_route_info_create()
1608 !(cfg->fc_flags & RTF_LOCAL))) { in ip6_route_info_create()
1624 switch (cfg->fc_type) { in ip6_route_info_create()
1637 rt->dst.error = (cfg->fc_type == RTN_THROW) ? -EAGAIN in ip6_route_info_create()
1646 if (cfg->fc_flags & RTF_GATEWAY) { in ip6_route_info_create()
1650 gw_addr = &cfg->fc_gateway; in ip6_route_info_create()
1668 grt = rt6_lookup(net, gw_addr, NULL, cfg->fc_ifindex, 1); in ip6_route_info_create()
1700 if (!ipv6_addr_any(&cfg->fc_prefsrc)) { in ip6_route_info_create()
1701 if (!ipv6_chk_addr(net, &cfg->fc_prefsrc, dev, 0)) { in ip6_route_info_create()
1705 rt->rt6i_prefsrc.addr = cfg->fc_prefsrc; in ip6_route_info_create()
1710 rt->rt6i_flags = cfg->fc_flags; in ip6_route_info_create()
1717 cfg->fc_nlinfo.nl_net = dev_net(dev); in ip6_route_info_create()
1735 int ip6_route_add(struct fib6_config *cfg) in ip6_route_add() argument
1741 err = ip6_route_info_create(cfg, &rt); in ip6_route_add()
1745 err = ip6_convert_metrics(&mxc, cfg); in ip6_route_add()
1749 err = __ip6_ins_rt(rt, &cfg->fc_nlinfo, &mxc); in ip6_route_add()
1790 static int ip6_route_del(struct fib6_config *cfg) in ip6_route_del() argument
1797 table = fib6_get_table(cfg->fc_nlinfo.nl_net, cfg->fc_table); in ip6_route_del()
1804 &cfg->fc_dst, cfg->fc_dst_len, in ip6_route_del()
1805 &cfg->fc_src, cfg->fc_src_len); in ip6_route_del()
1809 if (cfg->fc_ifindex && in ip6_route_del()
1811 rt->dst.dev->ifindex != cfg->fc_ifindex)) in ip6_route_del()
1813 if (cfg->fc_flags & RTF_GATEWAY && in ip6_route_del()
1814 !ipv6_addr_equal(&cfg->fc_gateway, &rt->rt6i_gateway)) in ip6_route_del()
1816 if (cfg->fc_metric && cfg->fc_metric != rt->rt6i_metric) in ip6_route_del()
1821 return __ip6_del_rt(rt, &cfg->fc_nlinfo); in ip6_route_del()
2026 struct fib6_config cfg = { in rt6_add_route_info() local
2038 cfg.fc_dst = *prefix; in rt6_add_route_info()
2039 cfg.fc_gateway = *gwaddr; in rt6_add_route_info()
2043 cfg.fc_flags |= RTF_DEFAULT; in rt6_add_route_info()
2045 ip6_route_add(&cfg); in rt6_add_route_info()
2077 struct fib6_config cfg = { in rt6_add_dflt_router() local
2088 cfg.fc_gateway = *gwaddr; in rt6_add_dflt_router()
2090 ip6_route_add(&cfg); in rt6_add_dflt_router()
2121 struct fib6_config *cfg) in rtmsg_to_fib6_config() argument
2123 memset(cfg, 0, sizeof(*cfg)); in rtmsg_to_fib6_config()
2125 cfg->fc_table = RT6_TABLE_MAIN; in rtmsg_to_fib6_config()
2126 cfg->fc_ifindex = rtmsg->rtmsg_ifindex; in rtmsg_to_fib6_config()
2127 cfg->fc_metric = rtmsg->rtmsg_metric; in rtmsg_to_fib6_config()
2128 cfg->fc_expires = rtmsg->rtmsg_info; in rtmsg_to_fib6_config()
2129 cfg->fc_dst_len = rtmsg->rtmsg_dst_len; in rtmsg_to_fib6_config()
2130 cfg->fc_src_len = rtmsg->rtmsg_src_len; in rtmsg_to_fib6_config()
2131 cfg->fc_flags = rtmsg->rtmsg_flags; in rtmsg_to_fib6_config()
2133 cfg->fc_nlinfo.nl_net = net; in rtmsg_to_fib6_config()
2135 cfg->fc_dst = rtmsg->rtmsg_dst; in rtmsg_to_fib6_config()
2136 cfg->fc_src = rtmsg->rtmsg_src; in rtmsg_to_fib6_config()
2137 cfg->fc_gateway = rtmsg->rtmsg_gateway; in rtmsg_to_fib6_config()
2142 struct fib6_config cfg; in ipv6_route_ioctl() local
2156 rtmsg_to_fib6_config(net, &rtmsg, &cfg); in ipv6_route_ioctl()
2161 err = ip6_route_add(&cfg); in ipv6_route_ioctl()
2164 err = ip6_route_del(&cfg); in ipv6_route_ioctl()
2427 struct fib6_config *cfg) in rtm_to_fib6_config() argument
2440 memset(cfg, 0, sizeof(*cfg)); in rtm_to_fib6_config()
2442 cfg->fc_table = rtm->rtm_table; in rtm_to_fib6_config()
2443 cfg->fc_dst_len = rtm->rtm_dst_len; in rtm_to_fib6_config()
2444 cfg->fc_src_len = rtm->rtm_src_len; in rtm_to_fib6_config()
2445 cfg->fc_flags = RTF_UP; in rtm_to_fib6_config()
2446 cfg->fc_protocol = rtm->rtm_protocol; in rtm_to_fib6_config()
2447 cfg->fc_type = rtm->rtm_type; in rtm_to_fib6_config()
2453 cfg->fc_flags |= RTF_REJECT; in rtm_to_fib6_config()
2456 cfg->fc_flags |= RTF_LOCAL; in rtm_to_fib6_config()
2458 cfg->fc_nlinfo.portid = NETLINK_CB(skb).portid; in rtm_to_fib6_config()
2459 cfg->fc_nlinfo.nlh = nlh; in rtm_to_fib6_config()
2460 cfg->fc_nlinfo.nl_net = sock_net(skb->sk); in rtm_to_fib6_config()
2463 cfg->fc_gateway = nla_get_in6_addr(tb[RTA_GATEWAY]); in rtm_to_fib6_config()
2464 cfg->fc_flags |= RTF_GATEWAY; in rtm_to_fib6_config()
2473 nla_memcpy(&cfg->fc_dst, tb[RTA_DST], plen); in rtm_to_fib6_config()
2482 nla_memcpy(&cfg->fc_src, tb[RTA_SRC], plen); in rtm_to_fib6_config()
2486 cfg->fc_prefsrc = nla_get_in6_addr(tb[RTA_PREFSRC]); in rtm_to_fib6_config()
2489 cfg->fc_ifindex = nla_get_u32(tb[RTA_OIF]); in rtm_to_fib6_config()
2492 cfg->fc_metric = nla_get_u32(tb[RTA_PRIORITY]); in rtm_to_fib6_config()
2495 cfg->fc_mx = nla_data(tb[RTA_METRICS]); in rtm_to_fib6_config()
2496 cfg->fc_mx_len = nla_len(tb[RTA_METRICS]); in rtm_to_fib6_config()
2500 cfg->fc_table = nla_get_u32(tb[RTA_TABLE]); in rtm_to_fib6_config()
2503 cfg->fc_mp = nla_data(tb[RTA_MULTIPATH]); in rtm_to_fib6_config()
2504 cfg->fc_mp_len = nla_len(tb[RTA_MULTIPATH]); in rtm_to_fib6_config()
2512 cfg->fc_flags |= RTF_PREF(pref); in rtm_to_fib6_config()
2571 static int ip6_route_multipath_add(struct fib6_config *cfg) in ip6_route_multipath_add() argument
2582 int replace = (cfg->fc_nlinfo.nlh && in ip6_route_multipath_add()
2583 (cfg->fc_nlinfo.nlh->nlmsg_flags & NLM_F_REPLACE)); in ip6_route_multipath_add()
2586 remaining = cfg->fc_mp_len; in ip6_route_multipath_add()
2587 rtnh = (struct rtnexthop *)cfg->fc_mp; in ip6_route_multipath_add()
2593 memcpy(&r_cfg, cfg, sizeof(*cfg)); in ip6_route_multipath_add()
2623 err = __ip6_ins_rt(nh->rt6_info, &cfg->fc_nlinfo, &nh->mxc); in ip6_route_multipath_add()
2640 cfg->fc_nlinfo.nlh->nlmsg_flags &= ~(NLM_F_EXCL | in ip6_route_multipath_add()
2668 static int ip6_route_multipath_del(struct fib6_config *cfg) in ip6_route_multipath_del() argument
2676 remaining = cfg->fc_mp_len; in ip6_route_multipath_del()
2677 rtnh = (struct rtnexthop *)cfg->fc_mp; in ip6_route_multipath_del()
2681 memcpy(&r_cfg, cfg, sizeof(*cfg)); in ip6_route_multipath_del()
2707 struct fib6_config cfg; in inet6_rtm_delroute() local
2710 err = rtm_to_fib6_config(skb, nlh, &cfg); in inet6_rtm_delroute()
2714 if (cfg.fc_mp) in inet6_rtm_delroute()
2715 return ip6_route_multipath_del(&cfg); in inet6_rtm_delroute()
2717 return ip6_route_del(&cfg); in inet6_rtm_delroute()
2722 struct fib6_config cfg; in inet6_rtm_newroute() local
2725 err = rtm_to_fib6_config(skb, nlh, &cfg); in inet6_rtm_newroute()
2729 if (cfg.fc_mp) in inet6_rtm_newroute()
2730 return ip6_route_multipath_add(&cfg); in inet6_rtm_newroute()
2732 return ip6_route_add(&cfg); in inet6_rtm_newroute()