netfilter/ip_nat_snmp_basic.c: fix inlines (fwd)
Subsystems (2)
PATCH 1/1 netfilter/ip_nat_snmp_basic.c: fix inlines (fwd)
FYI:
The patch forwarded below is still required in 2.6.8-rc2-mm1.
----- Forwarded message from Adrian Bunk <[email protected]> -----
Date: Wed, 14 Jul 2004 23:19:09 +0200
From: Adrian Bunk <[email protected]>
To: James Morris <[email protected]>
Cc: [email protected], [email protected]
Subject: [2.6 patch] netfilter/ip_nat_snmp_basic.c: fix inlines
Trying to compile net/ipv4/netfilter/ip_nat_snmp_basic.c in 2.6.8-rc1-mm1 using gcc 3.4 results in the following compile error:
<-- snip -->
...
CC net/ipv4/netfilter/ip_nat_snmp_basic.onet/ipv4/netfilter/ip_nat_snmp_basic.c: In function `snmp_trap_decode':net/ipv4/netfilter/ip_nat_snmp_basic.c:612: sorry, unimplemented:
inlining failed in call to 'mangle_address': function body not available net/ipv4/netfilter/ip_nat_snmp_basic.c:896: sorry, unimplemented: called from here make[3]: *** [net/ipv4/netfilter/ip_nat_snmp_basic.o] Error 1
<-- snip -->
The patch below moves an inlined function above the place where it is called the first time.
An alternative approach would be to remove the inline.
diffstat output:
net/ipv4/netfilter/ip_nat_snmp_basic.c | 142 ++++++++++++------------- 1 files changed, 71 insertions(+), 71 deletions(-)
net/ipv4/netfilter/ip_nat_snmp_basic.c renamed from net/ipv4/netfilter/ip_nat_snmp_basic.c.old +71 -71
@@ -862,6 +862,77 @@return 1 ; } +/* +* Fast checksum update for possibly oddly-aligned UDP byte, from the +* code example in the draft. +*/ +static void fast_csum (unsigned char *csum, +const unsigned char *optr, +const unsigned char *nptr, +int odd) +{ +long x, old, new; + + x = csum[0 ] *256 + csum[1 ]; + + x =~ x &0xFFFF ; + +if (odd) old = optr[0 ] *256 ; +else old = optr[0 ]; + + x -= old &0xFFFF ; +if (x <=0 ) { + x--; + x &=0xFFFF ; + } + +if (odd) new = nptr[0 ] *256 ; +else new = nptr[0 ]; + + x += new &0xFFFF ; +if (x &0x10000 ) { + x++; + x &=0xFFFF ; + } + + x =~ x &0xFFFF ; + csum[0 ] = x /256 ; + csum[1 ] = x &0xFF ; +} + +/* +* Mangle IP address. +* - begin points to the start of the snmp messgae +* - addr points to the start of the address +*/ +static inline void mangle_address (unsigned char *begin, +unsigned char *addr, +const struct oct1_map *map, +u_int16_t *check) +{ +if (map->from ==NOCT1 (*addr)) { +u_int32_t old; + +if (debug) +memcpy (&old, (unsigned char *)addr,sizeof (old)); + + *addr = map->to; + +/* Update UDP checksum if being used */ +if (*check) { +unsigned char odd = !((addr - begin) %2 ); + +fast_csum ((unsigned char *)check, + &map->from, &map->to, odd); + + } + +if (debug) +printk (KERN_DEBUG "bsalg: mapped %u.%u.%u.%u to " +"%u.%u.%u.%u\n" ,NIPQUAD (old),NIPQUAD (*addr)); + } +} + static unsigned char snmp_trap_decode(struct asn1_ctx *ctx, struct snmp_v1_trap *trap, const struct oct1_map *map,
@@ -952,77 +1023,6 @@printk ("\n" ); } -/* -* Fast checksum update for possibly oddly-aligned UDP byte, from the -* code example in the draft. -*/ -static void fast_csum (unsigned char *csum, -const unsigned char *optr, -const unsigned char *nptr, -int odd) -{ -long x, old, new; - - x = csum[0 ] *256 + csum[1 ]; - - x =~ x &0xFFFF ; - -if (odd) old = optr[0 ] *256 ; -else old = optr[0 ]; - - x -= old &0xFFFF ; -if (x <=0 ) { - x--; - x &=0xFFFF ; - } - -if (odd) new = nptr[0 ] *256 ; -else new = nptr[0 ]; - - x += new &0xFFFF ; -if (x &0x10000 ) { - x++; - x &=0xFFFF ; - } - - x =~ x &0xFFFF ; - csum[0 ] = x /256 ; - csum[1 ] = x &0xFF ; -} - -/* -* Mangle IP address. -* - begin points to the start of the snmp messgae -* - addr points to the start of the address -*/ -static inline void mangle_address (unsigned char *begin, -unsigned char *addr, -const struct oct1_map *map, -u_int16_t *check) -{ -if (map->from ==NOCT1 (*addr)) { -u_int32_t old; - -if (debug) -memcpy (&old, (unsigned char *)addr,sizeof (old)); - - *addr = map->to; - -/* Update UDP checksum if being used */ -if (*check) { -unsigned char odd = !((addr - begin) %2 ); - -fast_csum ((unsigned char *)check, - &map->from, &map->to, odd); - - } - -if (debug) -printk (KERN_DEBUG "bsalg: mapped %u.%u.%u.%u to " -"%u.%u.%u.%u\n" ,NIPQUAD (old),NIPQUAD (*addr)); - } -} -/* * Parse and mangle SNMP message according to mapping. * (And this is the fucking 'basic' method).
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
----- End forwarded message -----
Quoted 3 lines · Adrian Bunk
FYI:
The patch forwarded below is still required in 2.6.8-rc2-mm1.
I've pushed your patch to DaveM now. Apparently some gcc-3.4 specific issue...
Signature · 5 lines
- Harald Welte <[email protected]> http://www.netfilter.org/ ============================================================================ "Fragmentation is like classful addressing -- an interesting early architectural error that shows how much experimentation was going on while IP was being designed." -- Paul Vixie