mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 18:51:56 -04:00
netfilter: nat: remove l4proto->manip_pkt
This removes the last l4proto indirection, the two callers, the l3proto
packet mangling helpers for ipv4 and ipv6, now call the
nf_nat_l4proto_manip_pkt() helper.
nf_nat_proto_{dccp,tcp,sctp,gre,icmp,icmpv6} are left behind, even though
they contain no functionality anymore to not clutter this patch.
Next patch will remove the empty files and the nf_nat_l4proto
struct.
nf_nat_proto_udp.c is renamed to nf_nat_proto.c, as it now contains the
other nat manip functionality as well, not just udp and udplite.
Signed-off-by: Florian Westphal <[email protected]>
Signed-off-by: Pablo Neira Ayuso <[email protected]>
This commit is contained in:
parent
76b90019e0
commit
faec18dbb0
16 changed files with 365 additions and 357 deletions
|
|
@ -156,15 +156,10 @@ config NF_NAT_SNMP_BASIC
|
|||
|
||||
To compile it as a module, choose M here. If unsure, say N.
|
||||
|
||||
config NF_NAT_PROTO_GRE
|
||||
tristate
|
||||
depends on NF_CT_PROTO_GRE
|
||||
|
||||
config NF_NAT_PPTP
|
||||
tristate
|
||||
depends on NF_CONNTRACK
|
||||
default NF_CONNTRACK_PPTP
|
||||
select NF_NAT_PROTO_GRE
|
||||
|
||||
config NF_NAT_H323
|
||||
tristate
|
||||
|
|
|
|||
|
|
@ -77,8 +77,8 @@ static bool nf_nat_ipv4_manip_pkt(struct sk_buff *skb,
|
|||
iph = (void *)skb->data + iphdroff;
|
||||
hdroff = iphdroff + iph->ihl * 4;
|
||||
|
||||
if (!l4proto->manip_pkt(skb, &nf_nat_l3proto_ipv4, iphdroff, hdroff,
|
||||
target, maniptype))
|
||||
if (!nf_nat_l4proto_manip_pkt(skb, &nf_nat_l3proto_ipv4, iphdroff,
|
||||
hdroff, target, maniptype))
|
||||
return false;
|
||||
iph = (void *)skb->data + iphdroff;
|
||||
|
||||
|
|
|
|||
|
|
@ -299,8 +299,6 @@ pptp_inbound_pkt(struct sk_buff *skb,
|
|||
|
||||
static int __init nf_nat_helper_pptp_init(void)
|
||||
{
|
||||
nf_nat_need_gre();
|
||||
|
||||
BUG_ON(nf_nat_pptp_hook_outbound != NULL);
|
||||
RCU_INIT_POINTER(nf_nat_pptp_hook_outbound, pptp_outbound_pkt);
|
||||
|
||||
|
|
|
|||
|
|
@ -37,49 +37,8 @@ MODULE_LICENSE("GPL");
|
|||
MODULE_AUTHOR("Harald Welte <[email protected]>");
|
||||
MODULE_DESCRIPTION("Netfilter NAT protocol helper module for GRE");
|
||||
|
||||
/* manipulate a GRE packet according to maniptype */
|
||||
static bool
|
||||
gre_manip_pkt(struct sk_buff *skb,
|
||||
const struct nf_nat_l3proto *l3proto,
|
||||
unsigned int iphdroff, unsigned int hdroff,
|
||||
const struct nf_conntrack_tuple *tuple,
|
||||
enum nf_nat_manip_type maniptype)
|
||||
{
|
||||
const struct gre_base_hdr *greh;
|
||||
struct pptp_gre_header *pgreh;
|
||||
|
||||
/* pgreh includes two optional 32bit fields which are not required
|
||||
* to be there. That's where the magic '8' comes from */
|
||||
if (!skb_make_writable(skb, hdroff + sizeof(*pgreh) - 8))
|
||||
return false;
|
||||
|
||||
greh = (void *)skb->data + hdroff;
|
||||
pgreh = (struct pptp_gre_header *)greh;
|
||||
|
||||
/* we only have destination manip of a packet, since 'source key'
|
||||
* is not present in the packet itself */
|
||||
if (maniptype != NF_NAT_MANIP_DST)
|
||||
return true;
|
||||
|
||||
switch (greh->flags & GRE_VERSION) {
|
||||
case GRE_VERSION_0:
|
||||
/* We do not currently NAT any GREv0 packets.
|
||||
* Try to behave like "nf_nat_proto_unknown" */
|
||||
break;
|
||||
case GRE_VERSION_1:
|
||||
pr_debug("call_id -> 0x%04x\n", ntohs(tuple->dst.u.gre.key));
|
||||
pgreh->call_id = tuple->dst.u.gre.key;
|
||||
break;
|
||||
default:
|
||||
pr_debug("can't nat unknown GRE version\n");
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
static const struct nf_nat_l4proto gre = {
|
||||
.l4proto = IPPROTO_GRE,
|
||||
.manip_pkt = gre_manip_pkt,
|
||||
};
|
||||
|
||||
static int __init nf_nat_proto_gre_init(void)
|
||||
|
|
|
|||
|
|
@ -10,33 +10,12 @@
|
|||
#include <linux/init.h>
|
||||
#include <linux/export.h>
|
||||
#include <linux/ip.h>
|
||||
#include <linux/icmp.h>
|
||||
|
||||
#include <linux/netfilter.h>
|
||||
#include <net/netfilter/nf_nat.h>
|
||||
#include <net/netfilter/nf_nat_core.h>
|
||||
#include <net/netfilter/nf_nat_l4proto.h>
|
||||
|
||||
static bool
|
||||
icmp_manip_pkt(struct sk_buff *skb,
|
||||
const struct nf_nat_l3proto *l3proto,
|
||||
unsigned int iphdroff, unsigned int hdroff,
|
||||
const struct nf_conntrack_tuple *tuple,
|
||||
enum nf_nat_manip_type maniptype)
|
||||
{
|
||||
struct icmphdr *hdr;
|
||||
|
||||
if (!skb_make_writable(skb, hdroff + sizeof(*hdr)))
|
||||
return false;
|
||||
|
||||
hdr = (struct icmphdr *)(skb->data + hdroff);
|
||||
inet_proto_csum_replace2(&hdr->checksum, skb,
|
||||
hdr->un.echo.id, tuple->src.u.icmp.id, false);
|
||||
hdr->un.echo.id = tuple->src.u.icmp.id;
|
||||
return true;
|
||||
}
|
||||
|
||||
const struct nf_nat_l4proto nf_nat_l4proto_icmp = {
|
||||
.l4proto = IPPROTO_ICMP,
|
||||
.manip_pkt = icmp_manip_pkt,
|
||||
};
|
||||
|
|
|
|||
Loading…
Reference in a new issue