[BACK]Return to raw_ip.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/raw_ip.c between version 1.53 and 1.59

version 1.53, 2000/03/30 13:25:04 version 1.59, 2001/11/13 00:32:40
Line 64 
Line 64 
  *      @(#)raw_ip.c    8.7 (Berkeley) 5/15/95   *      @(#)raw_ip.c    8.7 (Berkeley) 5/15/95
  */   */
   
   #include <sys/cdefs.h>
   __KERNEL_RCSID(0, "$NetBSD$");
   
 #include "opt_ipsec.h"  #include "opt_ipsec.h"
 #include "opt_mrouting.h"  #include "opt_mrouting.h"
   
Line 162  rip_input(m, va_alist)
Line 165  rip_input(m, va_alist)
          */           */
         ip->ip_len -= ip->ip_hl << 2;          ip->ip_len -= ip->ip_hl << 2;
   
         for (inp = rawcbtable.inpt_queue.cqh_first;          CIRCLEQ_FOREACH(inp, &rawcbtable.inpt_queue, inp_queue) {
             inp != (struct inpcb *)&rawcbtable.inpt_queue;  
             inp = inp->inp_queue.cqe_next) {  
                 if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto)                  if (inp->inp_ip.ip_p && inp->inp_ip.ip_p != proto)
                         continue;                          continue;
                 if (!in_nullhost(inp->inp_laddr) &&                  if (!in_nullhost(inp->inp_laddr) &&
Line 175  rip_input(m, va_alist)
Line 176  rip_input(m, va_alist)
                         continue;                          continue;
                 if (last) {                  if (last) {
                         struct mbuf *n;                          struct mbuf *n;
   
   #ifdef IPSEC
                           /* check AH/ESP integrity. */
                           if (ipsec4_in_reject_so(m, last->inp_socket)) {
                                   ipsecstat.in_polvio++;
                                   /* do not inject data to pcb */
                           } else
   #endif /*IPSEC*/
                         if ((n = m_copy(m, 0, (int)M_COPYALL)) != NULL) {                          if ((n = m_copy(m, 0, (int)M_COPYALL)) != NULL) {
                                 if (last->inp_flags & INP_CONTROLOPTS ||                                  if (last->inp_flags & INP_CONTROLOPTS ||
                                     last->inp_socket->so_options & SO_TIMESTAMP)                                      last->inp_socket->so_options & SO_TIMESTAMP)
Line 192  rip_input(m, va_alist)
Line 201  rip_input(m, va_alist)
                 }                  }
                 last = inp;                  last = inp;
         }          }
   #ifdef IPSEC
           /* check AH/ESP integrity. */
           if (last && ipsec4_in_reject_so(m, last->inp_socket)) {
                   m_freem(m);
                   ipsecstat.in_polvio++;
                   ipstat.ips_delivered--;
                   /* do not inject data to pcb */
           } else
   #endif /*IPSEC*/
         if (last) {          if (last) {
                 if (last->inp_flags & INP_CONTROLOPTS ||                  if (last->inp_flags & INP_CONTROLOPTS ||
                     last->inp_socket->so_options & SO_TIMESTAMP)                      last->inp_socket->so_options & SO_TIMESTAMP)
Line 279  rip_output(m, va_alist)
Line 297  rip_output(m, va_alist)
                 ipstat.ips_rawout++;                  ipstat.ips_rawout++;
         }          }
 #ifdef IPSEC  #ifdef IPSEC
         ipsec_setsocket(m, inp->inp_socket);          if (ipsec_setsocket(m, inp->inp_socket) != 0) {
                   m_freem(m);
                   return ENOBUFS;
           }
 #endif /*IPSEC*/  #endif /*IPSEC*/
         return (ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions, &inp->inp_errormtu));          return (ip_output(m, opts, &inp->inp_route, flags, inp->inp_moptions, &inp->inp_errormtu));
 }  }
Line 369  rip_bind(inp, nam)
Line 390  rip_bind(inp, nam)
   
         if (nam->m_len != sizeof(*addr))          if (nam->m_len != sizeof(*addr))
                 return (EINVAL);                  return (EINVAL);
         if (ifnet.tqh_first == 0)          if (TAILQ_FIRST(&ifnet) == 0)
                 return (EADDRNOTAVAIL);                  return (EADDRNOTAVAIL);
         if (addr->sin_family != AF_INET &&          if (addr->sin_family != AF_INET &&
             addr->sin_family != AF_IMPLINK)              addr->sin_family != AF_IMPLINK)
Line 390  rip_connect(inp, nam)
Line 411  rip_connect(inp, nam)
   
         if (nam->m_len != sizeof(*addr))          if (nam->m_len != sizeof(*addr))
                 return (EINVAL);                  return (EINVAL);
         if (ifnet.tqh_first == 0)          if (TAILQ_FIRST(&ifnet) == 0)
                 return (EADDRNOTAVAIL);                  return (EADDRNOTAVAIL);
         if (addr->sin_family != AF_INET &&          if (addr->sin_family != AF_INET &&
             addr->sin_family != AF_IMPLINK)              addr->sin_family != AF_IMPLINK)
Line 430  rip_usrreq(so, req, m, nam, control, p)
Line 451  rip_usrreq(so, req, m, nam, control, p)
                     (struct ifnet *)control, p));                      (struct ifnet *)control, p));
   
         if (req == PRU_PURGEIF) {          if (req == PRU_PURGEIF) {
                   in_pcbpurgeif0(&rawcbtable, (struct ifnet *)control);
                 in_purgeif((struct ifnet *)control);                  in_purgeif((struct ifnet *)control);
                 in_pcbpurgeif(&rawcbtable, (struct ifnet *)control);                  in_pcbpurgeif(&rawcbtable, (struct ifnet *)control);
                 return (0);                  return (0);
Line 467  rip_usrreq(so, req, m, nam, control, p)
Line 489  rip_usrreq(so, req, m, nam, control, p)
                         break;                          break;
                 inp = sotoinpcb(so);                  inp = sotoinpcb(so);
                 inp->inp_ip.ip_p = (long)nam;                  inp->inp_ip.ip_p = (long)nam;
 #ifdef IPSEC  
                 error = ipsec_init_policy(so, &inp->inp_sp);  
                 if (error != 0) {  
                         in_pcbdetach(inp);  
                         break;  
                 }  
 #endif /*IPSEC*/  
                 break;                  break;
   
         case PRU_DETACH:          case PRU_DETACH:

Legend:
Removed from v.1.53  
changed lines
  Added in v.1.59

CVSweb <webmaster@jp.NetBSD.org>