[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.142 and 1.143

version 1.142, 2014/08/05 05:24:26 version 1.143, 2014/08/05 07:55:32
Line 723  rip_recvoob(struct socket *so, struct mb
Line 723  rip_recvoob(struct socket *so, struct mb
 }  }
   
 static int  static int
   rip_send(struct socket *so, struct mbuf *m, struct mbuf *nam,
       struct mbuf *control, struct lwp *l)
   {
           struct inpcb *inp = sotoinpcb(so);
           int error = 0;
           int s;
   
           KASSERT(solocked(so));
           KASSERT(inp != NULL);
           KASSERT(m != NULL);
   
           /*
            * Ship a packet out.  The appropriate raw output
            * routine handles any massaging necessary.
            */
           if (control && control->m_len) {
                   m_freem(control);
                   m_freem(m);
                   return EINVAL;
           }
   
           s = splsoftnet();
           if (nam) {
                   if ((so->so_state & SS_ISCONNECTED) != 0) {
                           error = EISCONN;
                           goto die;
                   }
                   error = rip_connect_pcb(inp, nam);
                   if (error) {
                   die:
                           m_freem(m);
                           splx(s);
                           return error;
                   }
           } else {
                   if ((so->so_state & SS_ISCONNECTED) == 0) {
                           error = ENOTCONN;
                           goto die;
                   }
           }
           error = rip_output(m, inp);
           if (nam)
                   rip_disconnect1(inp);
   
           splx(s);
           return error;
   }
   
   static int
 rip_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)  rip_sendoob(struct socket *so, struct mbuf *m, struct mbuf *control)
 {  {
         KASSERT(solocked(so));          KASSERT(solocked(so));
Line 754  rip_usrreq(struct socket *so, int req, s
Line 803  rip_usrreq(struct socket *so, int req, s
         KASSERT(req != PRU_PEERADDR);          KASSERT(req != PRU_PEERADDR);
         KASSERT(req != PRU_SOCKADDR);          KASSERT(req != PRU_SOCKADDR);
         KASSERT(req != PRU_RCVOOB);          KASSERT(req != PRU_RCVOOB);
           KASSERT(req != PRU_SEND);
         KASSERT(req != PRU_SENDOOB);          KASSERT(req != PRU_SENDOOB);
   
         s = splsoftnet();          s = splsoftnet();
Line 770  rip_usrreq(struct socket *so, int req, s
Line 820  rip_usrreq(struct socket *so, int req, s
         KASSERT(solocked(so));          KASSERT(solocked(so));
         inp = sotoinpcb(so);          inp = sotoinpcb(so);
   
         KASSERT(!control || (req == PRU_SEND));          KASSERT(!control);
         if (inp == NULL) {          if (inp == NULL) {
                 splx(s);                  splx(s);
                 return EINVAL;                  return EINVAL;
Line 786  rip_usrreq(struct socket *so, int req, s
Line 836  rip_usrreq(struct socket *so, int req, s
                 error = EOPNOTSUPP;                  error = EOPNOTSUPP;
                 break;                  break;
   
         /*  
          * Ship a packet out.  The appropriate raw output  
          * routine handles any massaging necessary.  
          */  
         case PRU_SEND:  
                 if (control && control->m_len) {  
                         m_freem(control);  
                         m_freem(m);  
                         error = EINVAL;  
                         break;  
                 }  
         {  
                 if (nam) {  
                         if ((so->so_state & SS_ISCONNECTED) != 0) {  
                                 error = EISCONN;  
                                 goto die;  
                         }  
                         error = rip_connect_pcb(inp, nam);  
                         if (error) {  
                         die:  
                                 m_freem(m);  
                                 break;  
                         }  
                 } else {  
                         if ((so->so_state & SS_ISCONNECTED) == 0) {  
                                 error = ENOTCONN;  
                                 goto die;  
                         }  
                 }  
                 error = rip_output(m, inp);  
                 if (nam)  
                         rip_disconnect1(inp);  
         }  
                 break;  
   
         default:          default:
                 panic("rip_usrreq");                  panic("rip_usrreq");
         }          }
Line 844  PR_WRAP_USRREQS(rip)
Line 859  PR_WRAP_USRREQS(rip)
 #define rip_peeraddr    rip_peeraddr_wrapper  #define rip_peeraddr    rip_peeraddr_wrapper
 #define rip_sockaddr    rip_sockaddr_wrapper  #define rip_sockaddr    rip_sockaddr_wrapper
 #define rip_recvoob     rip_recvoob_wrapper  #define rip_recvoob     rip_recvoob_wrapper
   #define rip_send        rip_send_wrapper
 #define rip_sendoob     rip_sendoob_wrapper  #define rip_sendoob     rip_sendoob_wrapper
 #define rip_usrreq      rip_usrreq_wrapper  #define rip_usrreq      rip_usrreq_wrapper
   
Line 862  const struct pr_usrreqs rip_usrreqs = {
Line 878  const struct pr_usrreqs rip_usrreqs = {
         .pr_peeraddr    = rip_peeraddr,          .pr_peeraddr    = rip_peeraddr,
         .pr_sockaddr    = rip_sockaddr,          .pr_sockaddr    = rip_sockaddr,
         .pr_recvoob     = rip_recvoob,          .pr_recvoob     = rip_recvoob,
           .pr_send        = rip_send,
         .pr_sendoob     = rip_sendoob,          .pr_sendoob     = rip_sendoob,
         .pr_generic     = rip_usrreq,          .pr_generic     = rip_usrreq,
 };  };

Legend:
Removed from v.1.142  
changed lines
  Added in v.1.143

CVSweb <webmaster@jp.NetBSD.org>