From bc76594d91f3953d676201e3f06534338ab01524 Mon Sep 17 00:00:00 2001 From: Jozsef Kadlecsik Date: Thu, 3 Feb 2011 11:44:27 +0100 Subject: Reorganized kernel/ subdir The kernel/ subdirectory is reorganized to follow the kernel directory structure. --- kernel/ip_set_getport.c | 141 ------------------------------------------------ 1 file changed, 141 deletions(-) delete mode 100644 kernel/ip_set_getport.c (limited to 'kernel/ip_set_getport.c') diff --git a/kernel/ip_set_getport.c b/kernel/ip_set_getport.c deleted file mode 100644 index 8d52272..0000000 --- a/kernel/ip_set_getport.c +++ /dev/null @@ -1,141 +0,0 @@ -/* Copyright (C) 2003-2011 Jozsef Kadlecsik - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License version 2 as - * published by the Free Software Foundation. - */ - -/* Get Layer-4 data from the packets */ - -#include -#include -#include -#include -#include -#include -#include - -#include - -/* We must handle non-linear skbs */ -static bool -get_port(const struct sk_buff *skb, int protocol, unsigned int protooff, - bool src, __be16 *port, u8 *proto) -{ - switch (protocol) { - case IPPROTO_TCP: { - struct tcphdr _tcph; - const struct tcphdr *th; - - th = skb_header_pointer(skb, protooff, sizeof(_tcph), &_tcph); - if (th == NULL) - /* No choice either */ - return false; - - *port = src ? th->source : th->dest; - break; - } - case IPPROTO_UDP: { - struct udphdr _udph; - const struct udphdr *uh; - - uh = skb_header_pointer(skb, protooff, sizeof(_udph), &_udph); - if (uh == NULL) - /* No choice either */ - return false; - - *port = src ? uh->source : uh->dest; - break; - } - case IPPROTO_ICMP: { - struct icmphdr _ich; - const struct icmphdr *ic; - - ic = skb_header_pointer(skb, protooff, sizeof(_ich), &_ich); - if (ic == NULL) - return false; - - *port = (__force __be16)htons((ic->type << 8) | ic->code); - break; - } - case IPPROTO_ICMPV6: { - struct icmp6hdr _ich; - const struct icmp6hdr *ic; - - ic = skb_header_pointer(skb, protooff, sizeof(_ich), &_ich); - if (ic == NULL) - return false; - - *port = (__force __be16) - htons((ic->icmp6_type << 8) | ic->icmp6_code); - break; - } - default: - break; - } - *proto = protocol; - - return true; -} - -bool -ip_set_get_ip4_port(const struct sk_buff *skb, bool src, - __be16 *port, u8 *proto) -{ - const struct iphdr *iph = ip_hdr(skb); - unsigned int protooff = ip_hdrlen(skb); - int protocol = iph->protocol; - - /* See comments at tcp_match in ip_tables.c */ - if (protocol <= 0 || (ntohs(iph->frag_off) & IP_OFFSET)) - return false; - - return get_port(skb, protocol, protooff, src, port, proto); -} -EXPORT_SYMBOL_GPL(ip_set_get_ip4_port); - -#if defined(CONFIG_IP6_NF_IPTABLES) || defined(CONFIG_IP6_NF_IPTABLES_MODULE) -bool -ip_set_get_ip6_port(const struct sk_buff *skb, bool src, - __be16 *port, u8 *proto) -{ - int protoff; - u8 nexthdr; - - nexthdr = ipv6_hdr(skb)->nexthdr; - protoff = ipv6_skip_exthdr(skb, sizeof(struct ipv6hdr), &nexthdr); - if (protoff < 0) - return false; - - return get_port(skb, nexthdr, protoff, src, port, proto); -} -EXPORT_SYMBOL_GPL(ip_set_get_ip6_port); -#endif - -bool -ip_set_get_ip_port(const struct sk_buff *skb, u8 pf, bool src, __be16 *port) -{ - bool ret; - u8 proto; - - switch (pf) { - case AF_INET: - ret = ip_set_get_ip4_port(skb, src, port, &proto); - break; - case AF_INET6: - ret = ip_set_get_ip6_port(skb, src, port, &proto); - break; - default: - return false; - } - if (!ret) - return ret; - switch (proto) { - case IPPROTO_TCP: - case IPPROTO_UDP: - return true; - default: - return false; - } -} -EXPORT_SYMBOL_GPL(ip_set_get_ip_port); -- cgit v1.2.3