Line data Source code
1 : // SPDX-License-Identifier: GPL-2.0-only 2 : #include <linux/netlink.h> 3 : #include <linux/rtnetlink.h> 4 : #include <linux/types.h> 5 : #include <net/net_namespace.h> 6 : #include <net/netlink.h> 7 : #include <linux/in6.h> 8 : #include <net/ip.h> 9 : 10 0 : int rtm_getroute_parse_ip_proto(struct nlattr *attr, u8 *ip_proto, u8 family, 11 : struct netlink_ext_ack *extack) 12 : { 13 0 : *ip_proto = nla_get_u8(attr); 14 : 15 0 : switch (*ip_proto) { 16 : case IPPROTO_TCP: 17 : case IPPROTO_UDP: 18 : return 0; 19 0 : case IPPROTO_ICMP: 20 0 : if (family != AF_INET) 21 : break; 22 : return 0; 23 : #if IS_ENABLED(CONFIG_IPV6) 24 : case IPPROTO_ICMPV6: 25 : if (family != AF_INET6) 26 : break; 27 : return 0; 28 : #endif 29 : } 30 0 : NL_SET_ERR_MSG(extack, "Unsupported ip proto"); 31 : return -EOPNOTSUPP; 32 : } 33 : EXPORT_SYMBOL_GPL(rtm_getroute_parse_ip_proto);