[BACK]Return to ip_input.c CVS log [TXT][DIR] Up to [cvs.NetBSD.org] / src / sys / netinet

Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.

Diff for /src/sys/netinet/ip_input.c between version 1.209.2.2 and 1.210

version 1.209.2.2, 2005/03/19 08:36:38 version 1.210, 2005/02/02 21:41:55
Line 223  struct rttimer_queue *ip_mtudisc_timeout
Line 223  struct rttimer_queue *ip_mtudisc_timeout
 int     ipqmaxlen = IFQ_MAXLEN;  int     ipqmaxlen = IFQ_MAXLEN;
 u_long  in_ifaddrhash;                          /* size of hash table - 1 */  u_long  in_ifaddrhash;                          /* size of hash table - 1 */
 int     in_ifaddrentries;                       /* total number of addrs */  int     in_ifaddrentries;                       /* total number of addrs */
 struct in_ifaddrhead in_ifaddrhead;  struct in_ifaddrhead in_ifaddrhead;
 struct  in_ifaddrhashhead *in_ifaddrhashtbl;  struct  in_ifaddrhashhead *in_ifaddrhashtbl;
 u_long  in_multihash;                           /* size of hash table - 1 */  u_long  in_multihash;                           /* size of hash table - 1 */
 int     in_multientries;                        /* total number of addrs */  int     in_multientries;                        /* total number of addrs */
Line 257  do {        \
Line 257  do {        \
         (((((x) & 0xF) | ((((x) >> 8) & 0xF) << 4)) ^ (y)) & IPREASS_HMASK)          (((((x) & 0xF) | ((((x) >> 8) & 0xF) << 4)) ^ (y)) & IPREASS_HMASK)
 struct ipqhead ipq[IPREASS_NHASH];  struct ipqhead ipq[IPREASS_NHASH];
 int     ipq_locked;  int     ipq_locked;
 static int      ip_nfragpackets;        /* packets in reass queue */  static int      ip_nfragpackets;        /* packets in reass queue */
 static int      ip_nfrags;              /* total fragments in reass queues */  static int      ip_nfrags;              /* total fragments in reass queues */
   
 int     ip_maxfragpackets = 200;        /* limit on packets. XXX sysctl */  int     ip_maxfragpackets = 200;        /* limit on packets. XXX sysctl */
Line 267  int ip_maxfrags;          /* limit on fr
Line 267  int ip_maxfrags;          /* limit on fr
 /*  /*
  * Additive-Increase/Multiplicative-Decrease (AIMD) strategy for   * Additive-Increase/Multiplicative-Decrease (AIMD) strategy for
  * IP reassembly queue buffer managment.   * IP reassembly queue buffer managment.
  *   *
  * We keep a count of total IP fragments (NB: not fragmented packets!)   * We keep a count of total IP fragments (NB: not fragmented packets!)
  * awaiting reassembly (ip_nfrags) and a limit (ip_maxfrags) on fragments.   * awaiting reassembly (ip_nfrags) and a limit (ip_maxfrags) on fragments.
  * If ip_nfrags exceeds ip_maxfrags the limit, we drop half the   * If ip_nfrags exceeds ip_maxfrags the limit, we drop half the
Line 275  int ip_maxfrags;          /* limit on fr
Line 275  int ip_maxfrags;          /* limit on fr
  * repeatedly deleting single packets under heavy fragmentation load   * repeatedly deleting single packets under heavy fragmentation load
  * (e.g., from lossy NFS peers).   * (e.g., from lossy NFS peers).
  */   */
 static u_int    ip_reass_ttl_decr(u_int ticks);  static u_int    ip_reass_ttl_decr(u_int ticks);
 static void     ip_reass_drophalf(void);  static void     ip_reass_drophalf(void);
   
   
Line 283  static __inline int ipq_lock_try(void);
Line 283  static __inline int ipq_lock_try(void);
 static __inline void ipq_unlock(void);  static __inline void ipq_unlock(void);
   
 static __inline int  static __inline int
 ipq_lock_try(void)  ipq_lock_try()
 {  {
         int s;          int s;
   
Line 302  ipq_lock_try(void)
Line 302  ipq_lock_try(void)
 }  }
   
 static __inline void  static __inline void
 ipq_unlock(void)  ipq_unlock()
 {  {
         int s;          int s;
   
Line 395  ip_nmbclusters_changed(void)
Line 395  ip_nmbclusters_changed(void)
  * All protocols not implemented in kernel go to raw IP protocol handler.   * All protocols not implemented in kernel go to raw IP protocol handler.
  */   */
 void  void
 ip_init(void)  ip_init()
 {  {
         const struct protosw *pr;          const struct protosw *pr;
         int i;          int i;
Line 452  struct route ipforward_rt;
Line 452  struct route ipforward_rt;
  * IP software interrupt routine   * IP software interrupt routine
  */   */
 void  void
 ipintr(void)  ipintr()
 {  {
         int s;          int s;
         struct mbuf *m;          struct mbuf *m;
Line 668  ip_input(struct mbuf *m)
Line 668  ip_input(struct mbuf *m)
                  * default route for hosts on 1.1.1.0/24.  Of course this                   * default route for hosts on 1.1.1.0/24.  Of course this
                  * also requires a "map tlp0 ..." to complete the story.                   * also requires a "map tlp0 ..." to complete the story.
                  * One might argue whether or not this kind of network config.                   * One might argue whether or not this kind of network config.
                  * should be supported in this manner...                   * should be supported in this manner...
                  */                   */
                 srcrt = (odst.s_addr != ip->ip_dst.s_addr);                  srcrt = (odst.s_addr != ip->ip_dst.s_addr);
         }          }
Line 836  ip_input(struct mbuf *m)
Line 836  ip_input(struct mbuf *m)
                         sp = ipsec_getpolicy(tdbi, IPSEC_DIR_INBOUND);                          sp = ipsec_getpolicy(tdbi, IPSEC_DIR_INBOUND);
                 } else {                  } else {
                         sp = ipsec_getpolicybyaddr(m, IPSEC_DIR_INBOUND,                          sp = ipsec_getpolicybyaddr(m, IPSEC_DIR_INBOUND,
                                                    IP_FORWARDING, &error);                                                     IP_FORWARDING, &error);
                 }                  }
                 if (sp == NULL) {       /* NB: can happen if error */                  if (sp == NULL) {       /* NB: can happen if error */
                         splx(s);                          splx(s);
Line 986  found:
Line 986  found:
                  * done.  If so, then just pass it along.  This tag gets                   * done.  If so, then just pass it along.  This tag gets
                  * set during AH, ESP, etc. input handling, before the                   * set during AH, ESP, etc. input handling, before the
                  * packet is returned to the ip input queue for delivery.                   * packet is returned to the ip input queue for delivery.
                  */                   */
                 mtag = m_tag_find(m, PACKET_TAG_IPSEC_IN_DONE, NULL);                  mtag = m_tag_find(m, PACKET_TAG_IPSEC_IN_DONE, NULL);
                 s = splsoftnet();                  s = splsoftnet();
                 if (mtag != NULL) {                  if (mtag != NULL) {
Line 994  found:
Line 994  found:
                         sp = ipsec_getpolicy(tdbi, IPSEC_DIR_INBOUND);                          sp = ipsec_getpolicy(tdbi, IPSEC_DIR_INBOUND);
                 } else {                  } else {
                         sp = ipsec_getpolicybyaddr(m, IPSEC_DIR_INBOUND,                          sp = ipsec_getpolicybyaddr(m, IPSEC_DIR_INBOUND,
                                                    IP_FORWARDING, &error);                                                     IP_FORWARDING, &error);
                 }                  }
                 if (sp != NULL) {                  if (sp != NULL) {
                         /*                          /*
Line 1044  badcsum:
Line 1044  badcsum:
  * is given as fp; otherwise have to make a chain.   * is given as fp; otherwise have to make a chain.
  */   */
 struct mbuf *  struct mbuf *
 ip_reass(struct ipqent *ipqe, struct ipq *fp, struct ipqhead *ipqhead)  ip_reass(ipqe, fp, ipqhead)
           struct ipqent *ipqe;
           struct ipq *fp;
           struct ipqhead *ipqhead;
 {  {
         struct mbuf *m = ipqe->ipqe_m;          struct mbuf *m = ipqe->ipqe_m;
         struct ipqent *nq, *p, *q;          struct ipqent *nq, *p, *q;
Line 1075  ip_reass(struct ipqent *ipqe, struct ipq
Line 1078  ip_reass(struct ipqent *ipqe, struct ipq
          * We are about to add a fragment; increment frag count.           * We are about to add a fragment; increment frag count.
          */           */
         ip_nfrags++;          ip_nfrags++;
   
         /*          /*
          * If first fragment to arrive, create a reassembly queue.           * If first fragment to arrive, create a reassembly queue.
          */           */
Line 1244  dropfrag:
Line 1247  dropfrag:
  * associated datagrams.   * associated datagrams.
  */   */
 void  void
 ip_freef(struct ipq *fp)  ip_freef(fp)
           struct ipq *fp;
 {  {
         struct ipqent *q, *p;          struct ipqent *q, *p;
         u_int nfrags = 0;          u_int nfrags = 0;
Line 1285  ip_reass_ttl_decr(u_int ticks)
Line 1289  ip_reass_ttl_decr(u_int ticks)
         u_int nfrags, median, dropfraction, keepfraction;          u_int nfrags, median, dropfraction, keepfraction;
         struct ipq *fp, *nfp;          struct ipq *fp, *nfp;
         int i;          int i;
   
         nfrags = 0;          nfrags = 0;
         memset(fragttl_histo, 0, sizeof fragttl_histo);          memset(fragttl_histo, 0, sizeof fragttl_histo);
   
         for (i = 0; i < IPREASS_NHASH; i++) {          for (i = 0; i < IPREASS_NHASH; i++) {
                 for (fp = LIST_FIRST(&ipq[i]); fp != NULL; fp = nfp) {                  for (fp = LIST_FIRST(&ipq[i]); fp != NULL; fp = nfp) {
                         fp->ipq_ttl = ((fp->ipq_ttl  <= ticks) ?                          fp->ipq_ttl = ((fp->ipq_ttl  <= ticks) ?
Line 1341  ip_reass_drophalf(void)
Line 1345  ip_reass_drophalf(void)
  * queue, discard it.   * queue, discard it.
  */   */
 void  void
 ip_slowtimo(void)  ip_slowtimo()
 {  {
         static u_int dropscanidx = 0;          static u_int dropscanidx = 0;
         u_int i;          u_int i;
Line 1398  ip_slowtimo(void)
Line 1402  ip_slowtimo(void)
  * Drain off all datagram fragments.   * Drain off all datagram fragments.
  */   */
 void  void
 ip_drain(void)  ip_drain()
 {  {
   
         /*          /*
Line 1425  ip_drain(void)
Line 1429  ip_drain(void)
  * 0 if the packet should be processed further.   * 0 if the packet should be processed further.
  */   */
 int  int
 ip_dooptions(struct mbuf *m)  ip_dooptions(m)
           struct mbuf *m;
 {  {
         struct ip *ip = mtod(m, struct ip *);          struct ip *ip = mtod(m, struct ip *);
         u_char *cp, *cp0;          u_char *cp, *cp0;
Line 1654  bad:
Line 1659  bad:
  * return internet address info of interface to be used to get there.   * return internet address info of interface to be used to get there.
  */   */
 struct in_ifaddr *  struct in_ifaddr *
 ip_rtaddr(struct in_addr dst)  ip_rtaddr(dst)
            struct in_addr dst;
 {  {
         struct sockaddr_in *sin;          struct sockaddr_in *sin;
   
Line 1681  ip_rtaddr(struct in_addr dst)
Line 1687  ip_rtaddr(struct in_addr dst)
  * to be picked up later by ip_srcroute if the receiver is interested.   * to be picked up later by ip_srcroute if the receiver is interested.
  */   */
 void  void
 save_rte(u_char *option, struct in_addr dst)  save_rte(option, dst)
           u_char *option;
           struct in_addr dst;
 {  {
         unsigned olen;          unsigned olen;
   
Line 1703  save_rte(u_char *option, struct in_addr 
Line 1711  save_rte(u_char *option, struct in_addr 
  * The first hop is placed before the options, will be removed later.   * The first hop is placed before the options, will be removed later.
  */   */
 struct mbuf *  struct mbuf *
 ip_srcroute(void)  ip_srcroute()
 {  {
         struct in_addr *p, *q;          struct in_addr *p, *q;
         struct mbuf *m;          struct mbuf *m;
Line 1775  ip_srcroute(void)
Line 1783  ip_srcroute(void)
  * XXX should be deleted; last arg currently ignored.   * XXX should be deleted; last arg currently ignored.
  */   */
 void  void
 ip_stripoptions(struct mbuf *m, struct mbuf *mopt)  ip_stripoptions(m, mopt)
           struct mbuf *m;
           struct mbuf *mopt;
 {  {
         int i;          int i;
         struct ip *ip = mtod(m, struct ip *);          struct ip *ip = mtod(m, struct ip *);
Line 1817  const int inetctlerrmap[PRC_NCMDS] = {
Line 1827  const int inetctlerrmap[PRC_NCMDS] = {
  * via a source route.   * via a source route.
  */   */
 void  void
 ip_forward(struct mbuf *m, int srcrt)  ip_forward(m, srcrt)
           struct mbuf *m;
           int srcrt;
 {  {
         struct ip *ip = mtod(m, struct ip *);          struct ip *ip = mtod(m, struct ip *);
         struct sockaddr_in *sin;          struct sockaddr_in *sin;
Line 2045  ip_forward(struct mbuf *m, int srcrt)
Line 2057  ip_forward(struct mbuf *m, int srcrt)
 }  }
   
 void  void
 ip_savecontrol(struct inpcb *inp, struct mbuf **mp, struct ip *ip,  ip_savecontrol(inp, mp, ip, m)
     struct mbuf *m)          struct inpcb *inp;
           struct mbuf **mp;
           struct ip *ip;
           struct mbuf *m;
 {  {
   
         if (inp->inp_socket->so_options & SO_TIMESTAMP) {          if (inp->inp_socket->so_options & SO_TIMESTAMP) {
Line 2139  sysctl_net_inet_ip_maxflows(SYSCTLFN_ARG
Line 2154  sysctl_net_inet_ip_maxflows(SYSCTLFN_ARG
         s = sysctl_lookup(SYSCTLFN_CALL(rnode));          s = sysctl_lookup(SYSCTLFN_CALL(rnode));
         if (s)          if (s)
                 return (s);                  return (s);
   
         s = splsoftnet();          s = splsoftnet();
         ipflow_reap(0);          ipflow_reap(0);
         splx(s);          splx(s);
Line 2170  SYSCTL_SETUP(sysctl_net_inet_ip_setup, "
Line 2185  SYSCTL_SETUP(sysctl_net_inet_ip_setup, "
                        SYSCTL_DESCR("IPv4 related settings"),                         SYSCTL_DESCR("IPv4 related settings"),
                        NULL, 0, NULL, 0,                         NULL, 0, NULL, 0,
                        CTL_NET, PF_INET, IPPROTO_IP, CTL_EOL);                         CTL_NET, PF_INET, IPPROTO_IP, CTL_EOL);
   
         sysctl_createv(clog, 0, NULL, NULL,          sysctl_createv(clog, 0, NULL, NULL,
                        CTLFLAG_PERMANENT|CTLFLAG_READWRITE,                         CTLFLAG_PERMANENT|CTLFLAG_READWRITE,
                        CTLTYPE_INT, "forwarding",                         CTLTYPE_INT, "forwarding",

Legend:
Removed from v.1.209.2.2  
changed lines
  Added in v.1.210

CVSweb <webmaster@jp.NetBSD.org>