IPfilter
[Top] [All Lists]

A question about frpr_routing6 function in IPF4.1.22

To: <ipfilter@coombs.anu.edu.au>
Subject: A question about frpr_routing6 function in IPF4.1.22
From: Yenting Chen -陳彥廷 <Speedo.Chen@zyxel.com.tw>
Date: Wed, 23 May 2007 19:59:52 +0800
Delivered-to: sp-com-lists@consult.net
Delivered-to: ipfilter-list@securepoint.com
Sender: owner-ipfilter@coombs.anu.edu.au
Thread-index: AcedMd8YO52Wh9gPSQWU2yTSVoMXDQ==
Thread-topic: A question about frpr_routing6 function in IPF4.1.22
Hi, all:
 
Recently I found a paragraph of codes about routing extension header in IPv6 which confused me.
Could someone give me a hint? Thanks.
 
 
Below is the code between line 611 and line 637 in fil.c, frpr_routing6() is used to handle the routing extension header of IPv6 packet.
I have questions here.
 
It seems that fin->fin_dp (line 620) here is used to get "the length of routing extension header (shift)" to check if there is "nasty extension header length" or not.
But fin->fin_dp in code is pointed to next extension header after routing extension header since fin->fin_dp is changed in frpr_ipv6exthdr().
Or is there any RFCs specifics that the next header after routing extension header MUST
  1. longer than 40 bytes?         // ((shift < sizeof(struct ip6_hdr))
  2. aligned on four bits?          // ((shift - sizeof(struct ip6_hdr)) & 15))
 
 
 
static INLINE int frpr_routing6(fin)
fr_info_t *fin;
{
 struct ip6_ext *hdr;
 int shift;
 
 if (frpr_ipv6exthdr(fin, 0, IPPROTO_ROUTING) == IPPROTO_NONE)
  return IPPROTO_NONE;
 
 hdr = fin->fin_dp;                            // line 620
 shift = 8 + (hdr->ip6e_len << 3);
 /*
  * Nasty extension header length?
  */
 if ((shift < sizeof(struct ip6_hdr)) || 
     ((shift - sizeof(struct ip6_hdr)) & 15)) {
  fin->fin_flx |= FI_BAD;
  /*
   * Compensate for the changes made in frpr_ipv6exthdr()
   */
  fin->fin_dlen += shift;
  fin->fin_dp = (char *)fin->fin_dp - shift;
  return IPPROTO_NONE;
 }
 
 return hdr->ip6e_nxt;
}
 
 
Sincerely,
Y.T.
 
 
<Prev in Thread] Current Thread [Next in Thread>