linux/net/ipv4/icmp.c
<<
>>
Prefs
   1/*
   2 *      NET3:   Implementation of the ICMP protocol layer.
   3 *
   4 *              Alan Cox, <alan@lxorguk.ukuu.org.uk>
   5 *
   6 *      This program is free software; you can redistribute it and/or
   7 *      modify it under the terms of the GNU General Public License
   8 *      as published by the Free Software Foundation; either version
   9 *      2 of the License, or (at your option) any later version.
  10 *
  11 *      Some of the function names and the icmp unreach table for this
  12 *      module were derived from [icmp.c 1.0.11 06/02/93] by
  13 *      Ross Biro, Fred N. van Kempen, Mark Evans, Alan Cox, Gerhard Koerting.
  14 *      Other than that this module is a complete rewrite.
  15 *
  16 *      Fixes:
  17 *      Clemens Fruhwirth       :       introduce global icmp rate limiting
  18 *                                      with icmp type masking ability instead
  19 *                                      of broken per type icmp timeouts.
  20 *              Mike Shaver     :       RFC1122 checks.
  21 *              Alan Cox        :       Multicast ping reply as self.
  22 *              Alan Cox        :       Fix atomicity lockup in ip_build_xmit
  23 *                                      call.
  24 *              Alan Cox        :       Added 216,128 byte paths to the MTU
  25 *                                      code.
  26 *              Martin Mares    :       RFC1812 checks.
  27 *              Martin Mares    :       Can be configured to follow redirects
  28 *                                      if acting as a router _without_ a
  29 *                                      routing protocol (RFC 1812).
  30 *              Martin Mares    :       Echo requests may be configured to
  31 *                                      be ignored (RFC 1812).
  32 *              Martin Mares    :       Limitation of ICMP error message
  33 *                                      transmit rate (RFC 1812).
  34 *              Martin Mares    :       TOS and Precedence set correctly
  35 *                                      (RFC 1812).
  36 *              Martin Mares    :       Now copying as much data from the
  37 *                                      original packet as we can without
  38 *                                      exceeding 576 bytes (RFC 1812).
  39 *      Willy Konynenberg       :       Transparent proxying support.
  40 *              Keith Owens     :       RFC1191 correction for 4.2BSD based
  41 *                                      path MTU bug.
  42 *              Thomas Quinot   :       ICMP Dest Unreach codes up to 15 are
  43 *                                      valid (RFC 1812).
  44 *              Andi Kleen      :       Check all packet lengths properly
  45 *                                      and moved all kfree_skb() up to
  46 *                                      icmp_rcv.
  47 *              Andi Kleen      :       Move the rate limit bookkeeping
  48 *                                      into the dest entry and use a token
  49 *                                      bucket filter (thanks to ANK). Make
  50 *                                      the rates sysctl configurable.
  51 *              Yu Tianli       :       Fixed two ugly bugs in icmp_send
  52 *                                      - IP option length was accounted wrongly
  53 *                                      - ICMP header length was not accounted
  54 *                                        at all.
  55 *              Tristan Greaves :       Added sysctl option to ignore bogus
  56 *                                      broadcast responses from broken routers.
  57 *
  58 * To Fix:
  59 *
  60 *      - Should use skb_pull() instead of all the manual checking.
  61 *        This would also greatly simply some upper layer error handlers. --AK
  62 *
  63 */
  64
  65#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
  66
  67#include <linux/module.h>
  68#include <linux/types.h>
  69#include <linux/jiffies.h>
  70#include <linux/kernel.h>
  71#include <linux/fcntl.h>
  72#include <linux/socket.h>
  73#include <linux/in.h>
  74#include <linux/inet.h>
  75#include <linux/inetdevice.h>
  7
  
  linux/module.h
  v2.6.20.14[167" class="line7">  67  74#include <linux/inet.h>
 cne" no4> cne" no4> cne" no4>62mp.c# 4>62mp.c#62="line7lab2H3le.h c8ipv4/icm8.c#L70" id="L70" class=8line"8name="L70">  70#include < c8ipv4/icm8.c#L71" id="L71" class=8line"8name="L71">  71#include < c8ipv4/icm8.c#L72" id="L72" class=8line"8name="L72">  72#include < c8ipv4/icm8.c#L73" id="L73" class=8line"8name="L73">  73#include < c8ipv4/icm8.c#L74" id="L74" class=8line"8name="L74">  74#include < c8ipv4/icm8.c#L75" id="L75" class=8line"8name="L75">  75#include < c8ipv4/icm8.c#L76" id="L7 class="l8ne" n8me="L6676">  7
  
  #include < c8e" no4><8pa0"> cne" no4> 8ne" n84>62mp.c# 4>62mp.c#62="line7kbuff2H3le.h c9ipv4/icm9.c#L70" id="L70" class=9line"9name="L70">  70#include < c9ipv4/icm9.c#L71" id="L71" class=9line"9name="L71">  71#include < c9ipv4/icm9.c#L72" id="L72" class=9line"9name="L72">  72#include < c9ipv4/icm9.c#L73" id="L73" class=9line"9name="L73">  73#include <linux/inet.h>
  74#include+ambig= <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <l| <le/linux/inalt">asm/uacces">l">linux/inet.h>
  75#include <linux/inet.h>
  7
  
  >
lin9x/mod9le.hlinux/inet.h>
  74#include <linux/inet.h>
  66
  63/*
  61  62 */
  66
 < uglybxmref="+code=fmt" uglybxmKBUIL{"L66">  66
  >
 >
 >
  66
  66
 < uglhdrref="+code=fmt" uglhdrKBUILDquot; < uglhref="+code=fmt" uglhame=/inet.h>
 <__bep.c#L32" ide=fmt"__bep.ame=         Dquot; <=er sc#L32" ide=fmt"=er same=[3]/inet.h>
 >
 <    _lput f="+code=fmt"    _lpuame=/inet.h>
 < p_ Addeds_pyint f="+code=fmt" p_ Addeds_pyinKBUILDquot; >
>
  66
  17 */
  18 */
  66
 < ugl_atiref="+code=fmt" uglyatiKBUILDquot; < uglyati
  66
  66
   18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
   18 */
  */
 */
  66
    18 */
  */
 */
  66
    18 */
  */
 */
  66
   18 */
<1spa0"> cne" no4> 1cne" 179ame=                .Dquot;  */
 */
  66
    18 */
  */
 */
>
pr_fmt(< uglyati
>
lin18x/mo18le.h>
  18 */
<18pa0"> cne" no4> 18ne" 18name="L49">  49 speciref" w  Otho do       ICMP    mplete rewrite.
  60 */
 */
 < ugl_  66
   >
   18      ">   18<     funcation of ICMPass="comment"> */
>
  66
lin19x/mo19le.h< < ugl_ < ugl_poinrom ref="+code=fmt" uglypoinrom ame=[" >
  66
  49/*
  63 isinsteaos Preiveni    way be cls    ivrolam"comment">/*
  61inromfac   :roug as we can without
  62
   3 *
  14
  55 */
  < uglysrref="+code=fmt" uglysre="Lestruct "   */
  66
  <  < uglysrref="+code=fmt" uglysre="L[" >
>
>
 < uglyp in_l"frref="+code=fmt" uglyp in_l"fre="Lestruct "   */
  66
  >
  64
 >
  66
  < uglysrref="+code=fmt" uglysre="Le" >
  66
       66
  18  pachappen if nsteout fal     signalsuter _without_ a
  21outgonspatatio    Ch reply as self.
  22 */
 >
 >
>
 >
>
  66
 < n="L21"f="+code=fmt" n="L2ame= vo   " < uglyp in_un="frref="+code=fmt" uglyp in_un="fre="Lestruct "   */
  66
    >
>
  66
  34/*
  35tatiofrcla reply as self.
  36 */
>
 < n="L21"f="+code=fmt" n="L2ame= Dquot;  < uglv4_xrlim_anfigref="+code=fmt" uglv4_xrlim_anfige="Lestruct "     */
   <="frref="+code=fmt"="frame=,eint "  ref="+code=fmt"an> e="L)nt"> */
  66
    >
   >
  66
 <="frref="+code=fmt"="frame= uk.us"  */
 >
  66
  18 */
 <="frref="+code=fmt"="frame= ==LDquot; <    _DEST_UNREACHref="+code=fmt"    _DEST_UNREACHame= uampuuampu "  ref="+code=fmt"an> e="L ==LDquot; <    _FRAG_NEEDEDref="+code=fmt"    _FRAG_NEEDEDame=)nt"> */
 >
>
  18 */
       */
 >
  64
  18 */
 <="frref="+code=fmt"="frame=) uampu "  <  <:     _ ugly    maskref="+code=fmt"s     _ ugly    maskame=) {"L66">  66
 <   <  <    >
  <  */
  <  <:     _ ugly    Move ref="+code=fmt"s     _ ugly    Move e="L)/inet.h>
 < >
>
>
 >
>
>
  36/*
  57/*
  58 */
 < uglyout_gth wref="+code=fmt" uglyout_gth we="Lestruct "   <="frref="+code=fmt"="frame=)nt"> */
  66
   <="frref="+code=fmt"="frame=)/inet.h>
 <    _INC_STATSref="+code=fmt"tati_INC_STATSe="Le"  >
>
  64
  35/*
  36#nste    ars he dfinalam"comment">/*
  57/*
  58 */
<2spa0"> cne" no4> 2cne" 279ame= < uglyglue_bidsc#L32" ide=fmt" uglyglue_bidse="Levo   *"      */
   */
  66
 < uglybxmref="+code=fmt" uglybxmKBUIL*" < uglyparamref="+code=fmt" uglyparame="L =Lestruct " < uglybxmref="+code=fmt" uglybxmKBUIL*)" >
 <__w umref="+code=fmt"__w umame= " >
  64
   */
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;   */
lin28x/mo287ame=                                      "  >
  66
<28pa0"> cne" no4> 28ne" 289ame=        "       >
 < ugl_poinrom ref="+code=fmt" uglypoinrom ame=[" < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  < uglhref="+code=fmt" uglhame=.Dquot; <="frref="+code=fmt"="frame=].Dquot;  */
   < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot; >
>
>
  64
 < uglypush_ulticref="+code=fmt" uglypush_ultice="Lestruct " < uglybxmref="+code=fmt" uglybxmKBUIL*" < uglyparamref="+code=fmt" uglyparame="L,nt"> */
   */
lin29x/mo297ame=                            struct " < pcm_gtoki21"f="+code=fmt" pcm_gtoki2KBUIL*" < pcref="+code=fmt" pcame=,estruct "   */
  66
  >
  >
 */
  < uglysrref="+code=fmt" uglysre="Le"    >
 < p_append_pyint f="+code=fmt" p_append_pyine="Le"   < uglyglue_bidsc#L32" ide=fmt" uglyglue_bidse="L,e" < uglyparamref="+code=fmt" uglyparame="L,nt"> */
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot; <    _lput f="+code=fmt"    _lpuame=,nt"> */
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot; <    _lput f="+code=fmt"    _lpuame=,nt"> */
 < pcref="+code=fmt" pcame=,e"    66
 <    _INC_STATS_BHref="+code=fmt"    _INC_STATS_BHe="Le"   >
 < p_flush_pending_frclasc#L32" ide=fmt" p_flush_pending_frclase="Le" >
       66
 < uglhdrref="+code=fmt" uglhdrKBUIL*" < uglhref="+code=fmt" uglhame= =LDquot; < uglyhdrref="+code=fmt" ugl_hdrKBUI(" >
 <__w umref="+code=fmt"__w umame= " >
  >
  66
      66
    >
>
   */
 < uglhref="+code=fmt" uglhame=,nt"> */
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot; <    _lput f="+code=fmt"    _lpuame=, Dquot; >
 < uglhref="+code=fmt" uglhame=-uk.ukquot;  >
  < p_ ummedref="+code=fmt" p_ ummedame= =LDquot; >
 < p_push_pending_frclasc#L32" ide=fmt" p_push_pending_frclase="Le"  >
>
>
>
  36/*
  57tatioof ICMPs"am"comment">/*
  58 */
 */
 < uglyulticref="+code=fmt" uglyultice="Lestruct " < uglybxmref="+code=fmt" uglybxmKBUIL*" < uglyparamref="+code=fmt" uglyparame="L, struct "   */
  66
 < pcm_gtoki21"f="+code=fmt" pcm_gtoki2KBUIL" < pcref="+code=fmt" pcame=/inet.h>
    >
      >
  >
  >
 <  < nehref="+code=fmt"inehe="L/inet.h>
 <__bep.c#L32" ide=fmt"__bep.ame=s"  >
 */
 < p_options_echoref="+code=fmt" p_options_echoe="Le&ukquot; < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;     */
>
>
  < uglyp in_l"frref="+code=fmt" uglyp in_l"fre="Le" >
  >
>
 < nehref="+code=fmt"inehe="L =LDquot; < >
>
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  < uglhref="+code=fmt" uglhame=.Dquot; >
 */
 < nehref="+code=fmt"inehe="L-uk.ukquot;  < lyhdrref="+code=fmt" l_hdrKBUI("  >
  < lcref="+code=fmt" pcame=.Dquot;  < lyhdrref="+code=fmt" l_hdrKBUI("  >
   >
 < lcref="+code=fmt" pcame=.Dquot;  >
 < lcref="+code=fmt" pcame=.Dquot; >
 < ugl_paramref="+code=fmt" uglyparame="L-uk.ukquot;      66
 < lcref="+code=fmt" pcame=.Dquot;  < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  >
 < pcref="+code=fmt" pcame=.Dquot;    */
  < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;    >
>
   >
   >
   >
    < lyhdrref="+code=fmt" l_hdrKBUI("  >
   >
   >
  < l_route_out fa_kecref="+code=fmt" l_route_out fa_kece="Le"  >
   */
 >
    < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  < uglhref="+code=fmt" uglhame=.Dquot; <="frref="+code=fmt"="frame=,nt"> */
 < uglyparamref="+code=fmt" uglyparame="L-uk.ukquot;  < uglhref="+code=fmt" uglhame=.Dquot;  ref="+code=fmt"co> e="L))nt"> */
 < uglypush_ulticref="+code=fmt" uglypush_ultice="Le" < uglyparamref="+code=fmt" uglyparame="L,L&ukquot;  < pcref="+code=fmt" pcame=,e&ukquot; >
 < l_ra_putref="+code=fmt" l_ra_pute="Le" >
 >
 < uglyp in_un="frref="+code=fmt" uglyp in_un="fre="Le" >
>
  66
  < uglyuoute_lookupref="+code=fmt" uglyuoute_lookupe="Lestruct "    66
  */
<3spa0"> cne" no4> 3cne" 379ame=                                        struct "   */
 < phdrref="+code=fmt" lhdrKBUIL*" < lhref="+code=fmt" lhame=,nt"> */
 <__bep.c#L32" ide=fmt"__bep.ame=s"    */
 <="frref="+code=fmt"="frame=,eint "  ref="+code=fmt"an> e="L,nt"> */
 < uglybxmref="+code=fmt" uglybxmKBUIL*"  */
  66
   >
  >
lin38x/mo387ame=        int " >
  66
<38pa0"> cne" no4> 38ne" 389ame=        "   >
       >
      < phref="+code=fmt" lhame=-uk.ukquot; >
   >
    >
   >
  >
   ref="+code=fmt"fl4_ uglyan> ame= =LDquot;  ref="+code=fmt"an> e="L/inet.h>
lin39x/mo397ame=        "   >
  <__ l_route_out fa_kecref="+code=fmt"__ l_route_out fa_kece="Le"  >
   */
 >
 */
  18  one since we're just using>its address.ass="comment"> */
  >
  64
       */
  >
    66
   */
 >
     66
  >
>
 >
  64
   _session_reverstref="+code=fmt"xfrm_dean> _session_reverstKBUI("   >
  */
 >
  66
       66
  <__ l_route_out fa_kecref="+code=fmt"__ l_route_out fa_kece="Le"  >
   */
   >
  66
  >
 >
  66
    >
  < l_route_out fa_kecref="+code=fmt" l_route_out fa_kece="Le"  >
    66
   >
 >
>
  18 */
   <_skb_t;  18 */
  < l_route_inputref="+code=fmt" l_route_inputKBUI("      */
     >
>
   >
   >
  <_skb_t;   18 */
>
>
  */
 >
>
       */
   */
 >
    66
   >
    >
  >
     66
  */
   >
 >
  66
   >
 >
>
 >
>
 >
  */
 >
  >
>
  66
  36/*
  57tatioof ICMP in response to a situations="comment">/*
  57/*
  57/*
  57/*
  57/*
  57/*
  36/*
  57/*
  58 */
<4spa0"> cne" no4> 4cne" 479ame=nt"> */
 < uglysendref="+code=fmt" uglysende="Lestruct "   <="frref="+code=fmt"="frame=,eint "  ref="+code=fmt"an> e="L, " <__bep.c#L32" ide=fmt"__bep.ame=s"  */
  66
 < phdrref="+code=fmt" lhdrKBUIL*" < lhref="+code=fmt" lhame=/inet.h>
 >
 < uglybxmref="+code=fmt" uglybxmKBUIL" < uglyparamref="+code=fmt" uglyparame="L/inet.h>
    >
 < pcm_gtoki21"f="+code=fmt" pcm_gtoki2KBUIL" < pcref="+code=fmt" pcame=/inet.h>
lin48x/mo487ame=        struct "  >
 <__bep.c#L32" ide=fmt"__bep.ame=s" >
<48pa0"> cne" no4> 48ne" 489ame=        "  >
  >
  >
>
  */
 >
     >
  66
lin49x/mo497ame=        &L36">  36/*
  58be valid, of course.am"comment">/*
  36/*
  57/*
  57 */
 < lhref="+code=fmt" lhame= =LDquot; < lyhdrref="+code=fmt" l_hdrKBUI(" >
>
  < lhref="+code=fmt" lhame= < Dquot;  <    t f="+code=fmt"    ame= ||inet.h>
  <>work_    erref="+code=fmt"nehwork_    erame= + sizeofe*" < lhref="+code=fmt" lhame=)) uk.u Dquot;   */
 >
>
  36/*
  36physical multicast/broadcasts="comment">/*
  57 */
    */
 >
>
  36/*
  57/*
  36 */
     */
 >
 */
  36/*
  57/*
  57/*
  57 */
 < phref="+code=fmt" lhame=-uk.ukquot;  < tonst f="+code=fmt" tonsKBUI("  */
 >
  66
  36/*
  58tatioerror to a">tatioerror aoof I would t;sult..am"comment">/*
  36 */
  <="frref="+code=fmt"="frame=].Dquot;   66
  36/*
  57error, c     if wedare ulticing>to a"s="comment">/*
  57/*
  57 */
 < phref="+code=fmt" lhame=-uk.ukquot;    66
  <_innery="frref="+code=fmt"_innery="fre="L, *" < tpref="+code=fmt" tpame=/inet.h>
>
 < tpref="+code=fmt" tpame= =LDquot;   */
   */
 < phref="+code=fmt" lhame=-uk.ukquot;  */
  < uglhdrref="+code=fmt" uglhdrame=,nt"> */
 <="frref="+code=fmt"="frame=) -nt"> */
   */
 <_innery="frref="+code=fmt"_innery="fre="L),nt"> */
 <_innery="frref="+code=fmt"_innery="fre="L)/inet.h>
 < tpref="+code=fmt" tpame= ==LDquot;  */
 >
  66
  36/*
  57tatio="fr is a">error. Thisam"comment">/*
  57/*
  57 */
 < tpref="+code=fmt" tpame= uk.u Dquot; >
  < tpref="+code=fmt" tpame=].Dquot; >
 >
>
>
  66
  < ef=_xmit_l"frref="+code=fmt" ef=_xmit_l"frKBUI(" >
   */
>
>
  36/*
  57/*
  57 */
  66
  < phref="+code=fmt" lhame=-uk.ukquot; >
     66
   >
>
 >
  >
    */
     >
>
 >
  < neh_seleca_addrref="+code=fmt"ineh_seleca_addrKBUI("  >
<5spa0"> cne" no4> 5cne" 579ame=                        " >
 >
>
>
 <=osc#L32" ide=fmt"tose="L =LDquot; < ef=_pointerst f="+code=fmt"ref=_pointersame=[" <="frref="+code=fmt"="frame=].Dquot;  < phref="+code=fmt" lhame=-uk.ukquot; <=osc#L32" ide=fmt"tose="L &u Dquot; >
 >
 < phref="+code=fmt" lhame=-uk.ukquot; <=osc#L32" ide=fmt"tose="L/inet.h>
  66
lin58x/mo587ame=        if e"  < uglyparamref="+code=fmt" uglyparame="L.Dquot;     66
 >
<58pa0"> cne" no4> 58ne" 589ame=nt"> */
>
  36/*
  57/*
  57 */
  64
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot; <="frref="+code=fmt"="frame=       =LDquot; <="frref="+code=fmt"="frame=/inet.h>
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot;  ref="+code=fmt"an> ame=       =LDquot;  ref="+code=fmt"an> ame=/inet.h>
lin59x/mo597ame=        " < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot;   < nforef="+code=fmt" nfoame=/inet.h>
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot; >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;   >
 < neh_srref="+code=fmt" neh_srKBUI("  <=osc#L32" ide=fmt"tose="L =LDquot; <=osc#L32" ide=fmt"tose="L/inet.h>
 < lcref="+code=fmt" pcame=.Dquot;  < phref="+code=fmt" lhame=-uk.ukquot; >
 < lcref="+code=fmt" pcame=.Dquot;  < uglyparamref="+code=fmt" uglyparame="L.Dquot; >
 < lcref="+code=fmt" pcame=.Dquot; >
>
  < ef=_route_lookupref="+code=fmt" ef=_route_lookupKBUI("      <=osc#L32" ide=fmt"tose="L,nt"> */
 <="frref="+code=fmt"="frame=,LDquot;  ref="+code=fmt"an> ame=, &ukquot; < uglyparamref="+code=fmt" uglyparame="L)/inet.h>
    66
 >
>
     <="frref="+code=fmt"="frame=,LDquot;  ref="+code=fmt"an> ame=))"L66">  66
  ref="+code=fmt"en> e="L/inet.h>
>
  36withouh exceeding>576 bytes.ass="comment"> */
>
    >
   66
 >
  < phdrref="+code=fmt" lhdrKBUI) + " < uglyparamref="+code=fmt" uglyparame="L.Dquot;     < uglhdrref="+code=fmt" uglhdrame=)/inet.h>
>
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;    < uglyparamref="+code=fmt" uglyparame="L.Dquot; >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;    66
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhdrref="+code=fmt" uglhdrame=)/inet.h>
  66
 < uglypush_rlticref="+code=fmt" uglypush_rlticKBUI(&ukquot; < uglyparamref="+code=fmt" uglyparame="L, &ukquot;  < lcref="+code=fmt" pcame=,L&ukquot; >
  ref="+code=fmt"en> e="L:inet.h>
 < p_rtypuhref="+code=fmt" p_rtypuhe="Le" >
 >
 < ef=_xmit_unl"frref="+code=fmt" ef=_xmit_unl"frKBUI(" >
 >
>
  < ef=_sendref="+code=fmt" uglysende="L)/inet.h>
>
  66
 < uglys"freh_deliverref="+code=fmt" uglys"freh_deliverKBUI(struct "     */
  66
 < phdrref="+code=fmt" lhdrKBUIL*" < lhref="+code=fmt" lhame= =L(const struct " < phdrref="+code=fmt" lhdrKBUIL*)LDquot;  >
  < lprotref="+code=fmt" lprotame=/inet.h>
  < phref="+code=fmt" lhame=-uk.ukquot; >
>
  36 */
  57at protocol handlers.am"comment">/*
  57 */
   < phref="+code=fmt" lhame=-uk.ukquot;   66
>
  66
    >
>
 >
 < lprotref="+code=fmt" lprotame= =LDquot;  < neh_protost f="+code=fmt"rneh_protosKBUI[" >
 < lprotref="+code=fmt" lprotame= &u&u Dquot; < lprotref="+code=fmt" lprotame=-uk.ukquot;  */
 < lprotref="+code=fmt" lprotame=-uk.ukquot;   < nforef="+code=fmt" nfoame=)/inet.h>
 >
>
>
  58/*
  36/*
  57 */
>
 < uglyunreachref="+code=fmt" uglyunreachKBUI(struct "   */
  66
 < phdrref="+code=fmt" lhdrKBUIL*" < lhref="+code=fmt" lhame=/inet.h>
 < uglhdrref="+code=fmt" uglhdrame=L*" < uglhref="+code=fmt" uglhame=/inet.h>
  >
  >
  66
     >
>
  36/*
  57/*
  57/*
  57/*
  57 */
  66
   < phdrref="+code=fmt" lhdrKBUI)))"L66">  66
>
<6spa0"> cne" no4> 6cne" 679ame=nt"> */
 < uglhref="+code=fmt" uglhame= =LDquot; < ef=_hdrref="+code=fmt" ugl_hdrKBUI(" >
 < lhref="+code=fmt" lhame=   =L(const struct " < phdrref="+code=fmt" lhdrKBUIL*)Dquot;  >
>
 < lhref="+code=fmt" lhame=-uk.ukquot;   36 */
 >
>
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= ==LDquot;   66
lin68x/mo687ame=                switch e" < uglhref="+code=fmt" uglhame=-uk.ukquot;  ref="+code=fmt"an> ame= &u 15) {"L66">  66
 >
<68pa0"> cne" no4> 68ne" 689ame=                caseLDquot; >
 >
 >
>
 >
 < lv4_configref="+code=fmt" lv4_configame=.Dquot;   66
     36"%pI4: fragpan ation needed he dDF set\n"="comme),nt"> */
 < lhref="+code=fmt" lhame=-uk.ukquot; >
lin69x/mo697ame=                        } else {"L66">  66
   < uglhref="+code=fmt" uglhame=-uk.ukquot;   >
<6mmp.c#L9" id="L9" class=6"ne" 699ame=                                if e!"  */
 >
>
>
 >
     36"%pI4: Source Route Failed\n"="comme),nt"> */
 < lhref="+code=fmt" lhame=-uk.ukquot; >
>
lin707ine707ame=                default:inet.h>
>
>
 < uglhref="+code=fmt" uglhame=-uk.ukquot;  ref="+code=fmt"an> ame= &k.u Dquot;  */
 >
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= ==LDquot;  */
   < uglhref="+code=fmt" uglhame=-uk.ukquot;  >
  64
  36/*
  57at our lower layersam"comment">/*
  57/*
  58/*
  36/*
  57/*
  57/*
  57/*
  57/*
  57 */
>
  36/*
  57RFC 1122. Some routers sende="comment">/*
  58/*
  36at both ends, if it>does the"s="comment">/*
  57/*
  57 */
>
   >
   < phref="+code=fmt" lhame=-uk.ukquot;    66
   36"%pI4 sent>an invalid tatiot"fr %u, codr %u error to a broadcast: %pI4 on %s\n"="comme,nt"> */
 < l_hdrref="+code=fmt" l_hdrKBUI("   */
  <="frref="+code=fmt"="frame=,LDquot; < uglhref="+code=fmt" uglhame=-uk.ukquot;  ref="+code=fmt"an> ame=,nt"> */
 < lhref="+code=fmt" lhame=-uk.ukquot;    < claref="+code=fmt"nclaame=)/inet.h>
 >
>
>
 < uglys"freh_deliverref="+code=fmt" uglys"freh_deliverKBUI("  < nforef="+code=fmt" nfoame=)/inet.h>
>
 >
>
 >
   >
 >
>
>
>
  57/*
  57/*
  57 */
>
 < uglyredirectref="+code=fmt" uglyredirectKBUI(struct "   */
  66
   < phdrref="+code=fmt" lhdrKBUI)) {"L66">  66
     >
>
>
>
   < phdrref="+code=fmt" lhdrKBUI)))"L66">  66
>
>
 < uglys"freh_deliverref="+code=fmt" uglys"freh_deliverKBUI("  < ef=_hdrref="+code=fmt" ugl_hdrKBUI("   >
>
  66
  36/*
  57/*
  57/*
  57answers tatioechoKB"comment">/*
  57/*
  57/*
  57/*
  57/*
  57/*
  58of options once they are pone he dworking"am"comment">/*
 cne" no4> 7cne" 779ame="L36">  36 */
>
 < uglyechoref="+code=fmt" ugl_echoKBUI(struct "   */
  66
  >
  64
     >
     66
lin78x/mo787ame=                struct " < ugl_bxmref="+code=fmt" uglybxmame= " < ugl_paramref="+code=fmt" uglyparame="L/inet.h>
  66
<78pa0"> cne" no4> 78ne" 789ame=                " < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=      =L*" < ugl_hdrref="+code=fmt" ugl_hdrKBUI(" >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot;  >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot; >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;   >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  < uglhdrref="+code=fmt" uglhdrame=)/inet.h>
 < uglyreticref="+code=fmt" uglyrlticKBUI(&ukquot; < uglyparamref="+code=fmt" uglyparame="L, " >
>
lin79x/mo797ame=}inet.h>
  66
<7mmp.c#L9" id="L9" class=7"ne" 799ame="L36">  36/*
  57/*
  57/*
  57/*
  57/*
  57/*
  57 */
 < uglytimestampref="+code=fmt" uglytimestampKBUI(struct "   */
lin807ine80le.h<{"L66">  66
  >
 < ugl_bxmref="+code=fmt" uglybxmame= " < ugl_paramref="+code=fmt" uglyparame="L/inet.h>
  36/*
  57/*
  57 */
   */
 >
>
  36/*
  57/*
  58 */
  >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;      >
   >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;   < uglyparamref="+code=fmt" uglyparame="L.Dquot;  >
   < uglyparamref="+code=fmt" uglyparame="L.Dquot;   */
 >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=      =L*" < ugl_hdrref="+code=fmt" ugl_hdrKBUI(" >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot;  >
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  < uglhref="+code=fmt" uglhame=.Dquot;  ref="+code=fmt"an> ame= =L0/inet.h>
 < uglyparamref="+code=fmt" uglyparame="L.Dquot;  >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot; >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot; >
 < ugl_paramref="+code=fmt" uglyparame="L.Dquot;  < uglhdrref="+code=fmt" uglhdrame=) + 12/inet.h>
 < uglyreticref="+code=fmt" uglyrlticKBUI(&ukquot; < uglyparamref="+code=fmt" uglyparame="L, " >
 >
>
 >
      >
 >
>
 */
 < uglydiscardref="+code=fmt" uglydiscardKBUI(struct "   */
  66
>
>
  57/*
  57tatiopafrehs.am"comment">/*
  57 */
 < ugl_rcvref="+code=fmt" ugl_rcvKBUI(struct "   */
  66
 < uglhdrref="+code=fmt" uglhdrame=L*" < uglhref="+code=fmt" uglhame=/inet.h>
    >
      >
>
     66
    >
 >
  66
         66
   66
 >
>
   < uglhref="+code=fmt" uglhame=) + sizeofestruct " < phdrref="+code=fmt" lhdrKBUI)))"L66">  66
 >
>
   >
   < uglhref="+code=fmt" uglhame=))/inet.h>
  66
     66
 >
 */
   >
>
>
   >
  64
    66
 >
     66
 cne" no4> 8cne" 879ame=                &L57">  57 */
 >
  >
 <__skb_c    sum_>   66
 >
>
>
   < uglhref="+code=fmt" uglhame=)))"L66">  66
lin88x/mo887ame=                goto " >
  66
<88pa0"> cne" no4> 88ne" 889ame=        " < uglhref="+code=fmt" uglhame= =LDquot; < uglyhdrref="+code=fmt" ugl_hdrKBUI(" >
>
   < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame=)/inet.h>
  57/*
  57else is a mysterys="comment">/*
  57/*
  57/*
  57/*
lin89x/mo897ame=&L57">  57 */
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= &k.u Dquot;  */
<8mmp.c#L9" id="L9" class=8"ne" 899ame=                goto " >
>
>
  57/*
  57/*
  57 */
>
      66
lin907ine907ame=                &L57">  57/*
  58/*
  36/*
  57/*
  57/*
  57 */
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= ==LDquot;  */
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= ==LDquot; >
     66
 >
>
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= !=LDquot; >
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= !=LDquot; >
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= !=LDquot; >
 < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame= !=LDquot;   66
 >
>
>
>
 < uglypointerst f="+code=fmt" uglypointersame=[Dquot; < uglhref="+code=fmt" uglhame=-uk.ukquot; <="frref="+code=fmt"="frame=].Dquot;  >
>
 >
  >
>
 >
   >
 >
>
>
  57/*
  57/*
  58 */
 < ugl_controlref="+code=fmt" ugl_controlame= " < uglypointerst f="+code=fmt" uglypointersame=[Dquot;   66
   66
    66
  66
  66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
  66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
   66
  < uglyunreachref="+code=fmt" uglyunreachKBUI,"L66">  66
   66
  66
   66
  < uglyunreachref="+code=fmt" uglyunreachKBUI,"L66">  66
   66
  66
   66
  < uglyredirechref="+code=fmt" uglyredirechKBUI,"L66">  66
   66
  66
  66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
  66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
   66
  < uglyechoref="+code=fmt" ugl_echoKBUI,"L66">  66
  66
  66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
  66
 cne" no4> 9cne" 979ame=                .Dquot;  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
   66
  66
   66
  < uglyunreachref="+code=fmt" uglyunreachKBUI,"L66">  66
   66
  66
   66
lin88x9mo8879me=                gotuot;  < uglyunreachref="+code=fmt" uglyunreachKBUI,"L66">  66
   66
 cne" no4> 88n9" 8899me=        &quL66">  66
   66
    66
  66
   66
  < uglydiscardref="+code=fmt" uglydiscardKBUI,"L66">  66
  66
   66
lin89x9mo89799e=                gotuot;  < uglyunrcardref="+code=fmt" uglydiscardKBUI,"L66">  66
  66
   66
10v4=                gotuot;  < uglyunrcardref="+code=fmt" uglydiscardKBUI,"L66"/pre>">  66
10ve=        },"L66">  66
10ve=        [Dquot;   66
10ve=                   uot;  < uglyunrcardref="+code=fmt" uglydiscardKBUI,"L66">  66
10ve=        },"L66">  66
10ve=        [Dquot;   66
10ve=                .Dquot;  < uglyunrcardref="+code=fmt" uglydiscardKBUI,"L66">  66
lin89x10v.h>10ve=        },"L66">  66
10ve=}ineet.h>
10ve=nt"> */
10#L=nt"tic vo   " < ug_twor_exif="+code=fmt" ug_twor_exif=    ot; < uglyunrsk_exif="+code=fmt" uglyunrsk_exif=   ruct " < phref="+code=fmt"nehame=,LDquot;  */
10#e={"L66">  66
10#e=        [Dq " < ugl="+code=fmt" ugl=   et.h>
10#e=inet.h>
10#e=        },"ot; < ugfor_hKBU_possible_cpu="+code=fmt" ugfor_hKBU_possible_cpu=   rot; < ugl="+code=fmt" ugl=   "> */
10#e=                "  < ugref="+code=fmt"nehame=-uk.ukquot;   < ugl="+code=fmt" ugl=   ]net.h>
10#e=        " < ugee_sk="+code=fmt" ugee_sk=   rot; < ugref="+code=fmt"nehame=-uk.ukquot;  >
10#e=        " < ugref="+code=fmt"nehame=-uk.ukquot;   < ugLref="+code=fmt"NULLe="L, &et.h>
10#e=}inet.h>
10#e=nt"> */
10#L=nt"tic vo  " < ug_twor_tion="+code=fmt" ug_twor_tion=    ot; < uglyunrsk_tion="+code=fmt" uglyunrsk_tion=   ruct " < phref="+code=fmt"nehame=,LDquot;  */
10#e={"L66">  66
10#e=        [Dq " < ugl="+code=fmt" ugl=   quot; >
10#e=inet.h>
10#e=        },"ot; < ugref="+code=fmt"nehame=-uk.ukquot;  >
10#e=                "  < ugrr_cpu_idf="+code=fmt" ugrr_cpu_idf=,LDquzeofestruct " < phsock="+code=fmt" ugsock=,LDquDquot; >
10#e=        if e"    < ugLref="+code=fmt"NULLe="L, &"> */
10#e=                got onL0/i-ot; < ugENOMEM="+code=fmt"NULENOMEM=:inet.h>
10#e="L66">  66
10#e=        "  < ugl="+code=fmt" ugl=   "L66">  66
10#L=                gotuct " < phsock="+code=fmt" ugsock=,LDquot; < phsk="+code=fmt" ugsk=:inet.h>
10#e=inet.h>
10#e=                .Dqot;  < uglwor__ efsock_creaef="+code=fmt"__slwor__ efsock_creaef=   rpukquot; < ugsk="+code=fmt" ugsk=:inquot;   66
10#e=                        gottttttttttttttttttttot;   >
10#e=                &que"  */
10#e=                    &quuuuuo " >
10#e="L66">  66
10#e=                &L57t;    < ugl="+code=fmt" ugl=   ]Dquot; >
10#e="L66">  66
10#e=                &L57">  57 */
10#L=   7">  57/*
10#e="L57">  57 */
10#e=                .Dqot;   >
10#e=inet.h>
10#e=                &quo">  57/*
10#e=&L57">  57/*
10#e=&L57">  57 */
10#e=                &L57t;  < ugsk="+code=fmt" ugsk=:inquot; >
10#e=                .Dqot; < uglwor_sk="+code=fmt" uglwor_sk=   rot; < ugsk="+code=fmt" ugsk=:in).ukquot;  < ugIP_PMTUDISC_DONf="+code=fmt"RTCiP_PMTUDISC_DONf=:inet.h>
10#e=        &quLt.h>
10#L=inet.h>
10#e=        &quo">  57 */
10#e=        Dquot;   >
10#e=        "   >
10#e="L64">  64
10#5=        &quo">  57 */
10#e=        " < ugref="+code=fmt"nehame=-uk.ukquot;  >
10#e=inet.h>
10#8=        &quo">  57 */
10#e="L36">  36/*
10#L="L36">  36/*
10#e="L57">  57/*
10#e="L57">  57/*
10#e=&L57">  57elsit9; tasoaimfposon of"comment">/*
10#e=&L57">  57/*
10#e=&L57">  57/*
10#e=&L57">  57/*
10#e=&L57">  57/*
10#e="L58">  58 */
10#e=nt"> */
10#L=        " < ugref="+code=fmt"nehame=-uk.ukquot;   >
10#e=        "   >
10#e=        Dquot;   >
10#e=inet.h>
10#e=            onL0/inet.h>
10#e=inet.h>
10#e=&L57t; >
10#e=        " < ugfor_hKBU_possible_cpu="+code=fmt" ugfor_hKBU_possible_cpu=   rot; < ugl="+code=fmt" ugl=   "> */
10#e=                .Dqot; < uglwor__ efsock_damprof="+code=fmt" uglwor__ efsock_damprof=   rot; < ugref="+code=fmt"nehame=-uk.ukquot;   < ugl="+code=fmt" ugl=   ]net.h>
 cne" no4> 9cn100">>10#e=        "  < ugref="+code=fmt"nehame=-uk.ukquot;  >
10#L=            onL0/iot; >
10#e=   Lt.h>
10#2=inet.h>
10#e=inetic vo uct " < phperwor_operan ofs="+code=fmt"sysperwor_operan ofs=    ot; < ph_twor_tiondata="+code=fmt"sys_twor_tiondata=    ot; < phlyunrsk_opf="+code=fmt" uglypoisk_opf=:inDqu66">  66
10#e=          uot;  < phlyunrsk_tion="+code=fmt" uglyunrsk_tion=   66">  66
10#5=          uot;  < phlyunrsk_exif="+code=fmt" uglyunrsk_exif=   66">  66
10#e=&L5eet.h>
lin88x10e.h>10#e=inet.h>
10#e=    " < ug_ttion="+code=fmt" ug_ttion=    ot; < uglyunrtion="+code=fmt" uglyunrtion=   r  &q"> */
 cne" no4> 88n100">>10#e=   66">  66
10#L=            onL0/iot;  < uglyunrsk_opf="+code=fmt" uglypoisk_opf=:innet.h>
10#e=   Lt.h>
10#e="L57/pre>
The original LXR softwareibye def.h>http://sourceforge.; lx=@72"ux.no=.Dqu lx=.72"ux.no kindly hosmed b"f.h>http://www.redpill-72"pro.no">Redpill L2"pro AS=:inquprovider howL2"uxnst sult>elsand operan ofs services since 1995.