[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.3 and 1.7

version 1.3, 1993/05/18 18:20:12 version 1.7, 1993/12/18 00:42:00
Line 34 
Line 34 
  *      $Id$   *      $Id$
  */   */
   
 #include "param.h"  #include <sys/param.h>
 #include "malloc.h"  #include <sys/malloc.h>
 #include "select.h"  #include <sys/mbuf.h>
 #include "mbuf.h"  #include <sys/socket.h>
 #include "socket.h"  #include <sys/protosw.h>
 #include "protosw.h"  #include <sys/socketvar.h>
 #include "socketvar.h"  #include <sys/errno.h>
 #include "errno.h"  
   #include <net/if.h>
 #include "../net/if.h"  #include <net/route.h>
 #include "../net/route.h"  #include <net/raw_cb.h>
 #include "../net/raw_cb.h"  
   #include <netinet/in.h>
 #include "in.h"  #include <netinet/in_systm.h>
 #include "in_systm.h"  #include <netinet/ip.h>
 #include "ip.h"  #include <netinet/ip_var.h>
 #include "ip_var.h"  #include <netinet/in_pcb.h>
 #include "in_pcb.h"  
   
 /*  /*
  * Raw interface to IP protocol.   * Raw interface to IP protocol.
Line 97  rip_output(m, so)
Line 96  rip_output(m, so)
          * If the user handed us a complete IP packet, use it.           * If the user handed us a complete IP packet, use it.
          * Otherwise, allocate an mbuf for a header and fill it in.           * Otherwise, allocate an mbuf for a header and fill it in.
          */           */
         if (rp->rinp_flags & RINPF_HDRINCL)          if (rp->rinp_flags & RINPF_HDRINCL) {
                 ip = mtod(m, struct ip *);                  ip = mtod(m, struct ip *);
         else {                  if (ip->ip_len > m->m_pkthdr.len)
                           return EMSGSIZE;
                   ip->ip_len = m->m_pkthdr.len;
           } else {
                 M_PREPEND(m, sizeof(struct ip), M_WAIT);                  M_PREPEND(m, sizeof(struct ip), M_WAIT);
                 ip = mtod(m, struct ip *);                  ip = mtod(m, struct ip *);
                 ip->ip_tos = 0;                  ip->ip_tos = 0;
Line 117  rip_output(m, so)
Line 119  rip_output(m, so)
         return (ip_output(m,          return (ip_output(m,
            (rp->rinp_flags & RINPF_HDRINCL)? (struct mbuf *)0: rp->rinp_options,             (rp->rinp_flags & RINPF_HDRINCL)? (struct mbuf *)0: rp->rinp_options,
             &rp->rinp_route,              &rp->rinp_route,
            (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST));             (so->so_options & SO_DONTROUTE) | IP_ALLOWBROADCAST
   #ifdef MULTICAST
                   | IP_MULTICASTOPTS, rp->rinp_rcb.rcb_moptions
   #endif
           ));
 }  }
   
 /*  /*
Line 152  rip_ctloutput(op, so, level, optname, m)
Line 158  rip_ctloutput(op, so, level, optname, m)
                         else                          else
                                 rp->rinp_flags &= ~RINPF_HDRINCL;                                  rp->rinp_flags &= ~RINPF_HDRINCL;
                         break;                          break;
   #ifdef MULTICAST
                   case IP_MULTICAST_IF:
                   case IP_MULTICAST_TTL:
                   case IP_MULTICAST_LOOP:
                   case IP_ADD_MEMBERSHIP:
                   case IP_DROP_MEMBERSHIP:
                           error = ip_setmoptions(optname,
                                                  &rp->rinp_rcb.rcb_moptions, *m);
                           break;
                   default:
   #ifdef MROUTING
                           error = ip_mrouter_cmd(optname, so, *m);
   #else
                           error = EINVAL;
   #endif
                           break;
   #else
                 default:                  default:
                         error = EINVAL;                          error = EINVAL;
                         break;                          break;
   #endif
                 }                  }
                 break;                  break;
   
Line 176  rip_ctloutput(op, so, level, optname, m)
Line 199  rip_ctloutput(op, so, level, optname, m)
                         (*m)->m_len = sizeof (int);                          (*m)->m_len = sizeof (int);
                         *mtod(*m, int *) = rp->rinp_flags & RINPF_HDRINCL;                          *mtod(*m, int *) = rp->rinp_flags & RINPF_HDRINCL;
                         break;                          break;
   #ifdef MULTICAST
                   case IP_MULTICAST_IF:
                   case IP_MULTICAST_TTL:
                   case IP_MULTICAST_LOOP:
                   case IP_ADD_MEMBERSHIP:
                   case IP_DROP_MEMBERSHIP:
                           error = ip_getmoptions(optname,
                                                   rp->rinp_rcb.rcb_moptions, m);
                         break;
   #endif
                 default:                  default:
                         error = EINVAL;                          error = EINVAL;
                         m_freem(*m);                          m_freem(*m);
Line 198  rip_usrreq(so, req, m, nam, control)
Line 230  rip_usrreq(so, req, m, nam, control)
 {  {
         register int error = 0;          register int error = 0;
         register struct raw_inpcb *rp = sotorawinpcb(so);          register struct raw_inpcb *rp = sotorawinpcb(so);
   #if defined(MULTICAST) && defined(MROUTING)
           extern struct socket *ip_mrouter;
   #endif
         switch (req) {          switch (req) {
   
         case PRU_ATTACH:          case PRU_ATTACH:
Line 214  rip_usrreq(so, req, m, nam, control)
Line 248  rip_usrreq(so, req, m, nam, control)
         case PRU_DETACH:          case PRU_DETACH:
                 if (rp == 0)                  if (rp == 0)
                         panic("rip_detach");                          panic("rip_detach");
   #if defined(MULTICAST) && defined(MROUTING)
                   if (so == ip_mrouter)
                           ip_mrouter_done();
   #endif
                 if (rp->rinp_options)                  if (rp->rinp_options)
                         m_freem(rp->rinp_options);                          m_freem(rp->rinp_options);
   #ifdef MULTICAST
                   if (rp->rinp_rcb.rcb_moptions)
                           ip_freemoptions(rp->rinp_rcb.rcb_moptions);
   #endif
                 if (rp->rinp_route.ro_rt)                  if (rp->rinp_route.ro_rt)
                         RTFREE(rp->rinp_route.ro_rt);                          RTFREE(rp->rinp_route.ro_rt);
                 if (rp->rinp_rcb.rcb_laddr)                  if (rp->rinp_rcb.rcb_laddr)

Legend:
Removed from v.1.3  
changed lines
  Added in v.1.7

CVSweb <webmaster@jp.NetBSD.org>