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

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

Diff for /src/sys/netinet6/ip6_mroute.c between version 1.95 and 1.96

version 1.95, 2008/06/24 10:35:14 version 1.96, 2008/08/06 15:01:23
Line 161  static int ip6_mdq(struct mbuf *, struct
Line 161  static int ip6_mdq(struct mbuf *, struct
 static void phyint_send(struct ip6_hdr *, struct mif6 *, struct mbuf *);  static void phyint_send(struct ip6_hdr *, struct mif6 *, struct mbuf *);
   
 static int set_pim6(int *);  static int set_pim6(int *);
 static int get_pim6(struct mbuf *);  
 static int socket_send(struct socket *, struct mbuf *,  static int socket_send(struct socket *, struct mbuf *,
             struct sockaddr_in6 *);              struct sockaddr_in6 *);
 static int register_send(struct ip6_hdr *, struct mif6 *, struct mbuf *);  static int register_send(struct ip6_hdr *, struct mif6 *, struct mbuf *);
Line 308  pim6_init(void)
Line 307  pim6_init(void)
  * Handle MRT setsockopt commands to modify the multicast routing tables.   * Handle MRT setsockopt commands to modify the multicast routing tables.
  */   */
 int  int
 ip6_mrouter_set(int cmd, struct socket *so, struct mbuf *m)  ip6_mrouter_set(struct socket *so, struct sockopt *sopt)
 {  {
         if (cmd != MRT6_INIT && so != ip6_mrouter)          int error, optval;
           struct mif6ctl mifc;
           struct mf6cctl mfcc;
           mifi_t mifi;
   
           if (sopt->sopt_name != MRT6_INIT && so != ip6_mrouter)
                 return (EACCES);                  return (EACCES);
   
         switch (cmd) {          error = 0;
   
           switch (sopt->sopt_name) {
 #ifdef MRT6_OINIT  #ifdef MRT6_OINIT
         case MRT6_OINIT:          case MRT6_OINIT:
 #endif  #endif
         case MRT6_INIT:          case MRT6_INIT:
                 if (m == NULL || m->m_len != sizeof(int))                  error = sockopt_getint(sopt, &optval);
                         return (EINVAL);                  if (error)
                 return (ip6_mrouter_init(so, *mtod(m, int *), cmd));                          break;
                   return (ip6_mrouter_init(so, optval, sopt->sopt_name));
         case MRT6_DONE:          case MRT6_DONE:
                 return (ip6_mrouter_done());                  return (ip6_mrouter_done());
         case MRT6_ADD_MIF:          case MRT6_ADD_MIF:
                 if (m == NULL || m->m_len != sizeof(struct mif6ctl))                  error = sockopt_get(sopt, &mifc, sizeof(mifc));
                         return (EINVAL);                  if (error)
                 return (add_m6if(mtod(m, struct mif6ctl *)));                          break;
                   return (add_m6if(&mifc));
         case MRT6_DEL_MIF:          case MRT6_DEL_MIF:
                 if (m == NULL || m->m_len != sizeof(mifi_t))                  error = sockopt_get(sopt, &mifi, sizeof(mifi));
                         return (EINVAL);                  if (error)
                 return (del_m6if(mtod(m, mifi_t *)));                          break;
                   return (del_m6if(&mifi));
         case MRT6_ADD_MFC:          case MRT6_ADD_MFC:
                 if (m == NULL || m->m_len != sizeof(struct mf6cctl))                  error = sockopt_get(sopt, &mfcc, sizeof(mfcc));
                         return (EINVAL);                  if (error)
                 return (add_m6fc(mtod(m, struct mf6cctl *)));                          break;
                   return (add_m6fc(&mfcc));
         case MRT6_DEL_MFC:          case MRT6_DEL_MFC:
                 if (m == NULL || m->m_len != sizeof(struct mf6cctl))                  error = sockopt_get(sopt, &mfcc, sizeof(mfcc));
                         return (EINVAL);                  if (error)
                 return (del_m6fc(mtod(m,  struct mf6cctl *)));                          break;
                   return (del_m6fc(&mfcc));
         case MRT6_PIM:          case MRT6_PIM:
                 if (m == NULL || m->m_len != sizeof(int))                  error = sockopt_getint(sopt, &optval);
                         return (EINVAL);                  if (error)
                 return (set_pim6(mtod(m, int *)));                          break;
                   return (set_pim6(&optval));
         default:          default:
                 return (EOPNOTSUPP);                  error = EOPNOTSUPP;
         }          }
   
           return (error);
 }  }
   
 /*  /*
  * Handle MRT getsockopt commands   * Handle MRT getsockopt commands
  */   */
 int  int
 ip6_mrouter_get(int cmd, struct socket *so, struct mbuf **m)  ip6_mrouter_get(struct socket *so, struct sockopt *sopt)
 {  {
         struct mbuf *mb;          int error;
   
         if (so != ip6_mrouter) return EACCES;          if (so != ip6_mrouter) return EACCES;
   
         *m = mb = m_get(M_WAIT, MT_SOOPTS);          error = 0;
   
         switch (cmd) {          switch (sopt->sopt_name) {
         case MRT6_PIM:          case MRT6_PIM:
                 return get_pim6(mb);                  error = sockopt_set(sopt, &pim6, sizeof(pim6));
                   break;
         default:          default:
                 m_free(mb);                  error = EOPNOTSUPP;
                 return EOPNOTSUPP;                  break;
         }          }
   
           return (error);
 }  }
   
 /*  /*
Line 430  get_mif6_cnt(struct sioc_mif_req6 *req)
Line 447  get_mif6_cnt(struct sioc_mif_req6 *req)
         return 0;          return 0;
 }  }
   
 /*  
  * Get PIM processiong global  
  */  
 static int  
 get_pim6(struct mbuf *m)  
 {  
         int *i;  
   
         i = mtod(m, int *);  
   
         *i = pim6;  
   
         return 0;  
 }  
   
 static int  static int
 set_pim6(int *i)  set_pim6(int *i)
 {  {

Legend:
Removed from v.1.95  
changed lines
  Added in v.1.96

CVSweb <webmaster@jp.NetBSD.org>