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

version 1.59, 2008/04/12 05:58:22 version 1.59.10.1, 2008/12/13 01:15:26
Line 91  int
Line 91  int
 in_gif_output(struct ifnet *ifp, int family, struct mbuf *m)  in_gif_output(struct ifnet *ifp, int family, struct mbuf *m)
 {  {
         struct rtentry *rt;          struct rtentry *rt;
         struct gif_softc *sc = (struct gif_softc*)ifp;          struct gif_softc *sc = ifp->if_softc;
         struct sockaddr_in *sin_src = (struct sockaddr_in *)sc->gif_psrc;          struct sockaddr_in *sin_src = (struct sockaddr_in *)sc->gif_psrc;
         struct sockaddr_in *sin_dst = (struct sockaddr_in *)sc->gif_pdst;          struct sockaddr_in *sin_dst = (struct sockaddr_in *)sc->gif_pdst;
         struct ip iphdr;        /* capsule IP header, host byte ordered */          struct ip iphdr;        /* capsule IP header, host byte ordered */
Line 156  in_gif_output(struct ifnet *ifp, int fam
Line 156  in_gif_output(struct ifnet *ifp, int fam
                 return EAFNOSUPPORT;                  return EAFNOSUPPORT;
         }          }
   
         bzero(&iphdr, sizeof(iphdr));          memset(&iphdr, 0, sizeof(iphdr));
         iphdr.ip_src = sin_src->sin_addr;          iphdr.ip_src = sin_src->sin_addr;
         /* bidirectional configured tunnel mode */          /* bidirectional configured tunnel mode */
         if (sin_dst->sin_addr.s_addr != INADDR_ANY)          if (sin_dst->sin_addr.s_addr != INADDR_ANY)
Line 225  in_gif_input(struct mbuf *m, ...)
Line 225  in_gif_input(struct mbuf *m, ...)
                 return;                  return;
         }          }
 #ifndef GIF_ENCAPCHECK  #ifndef GIF_ENCAPCHECK
         if (!gif_validate4(ip, (struct gif_softc *)gifp, m->m_pkthdr.rcvif)) {          if (!gif_validate4(ip, gifp->if_softc, m->m_pkthdr.rcvif)) {
                 m_freem(m);                  m_freem(m);
                 ip_statinc(IP_STAT_NOGIF);                  ip_statinc(IP_STAT_NOGIF);
                 return;                  return;
Line 322  gif_validate4(const struct ip *ip, struc
Line 322  gif_validate4(const struct ip *ip, struc
   
         /* ingress filters on outer source */          /* ingress filters on outer source */
         if ((sc->gif_if.if_flags & IFF_LINK2) == 0 && ifp) {          if ((sc->gif_if.if_flags & IFF_LINK2) == 0 && ifp) {
                 struct sockaddr_in sin;                  union {
                           struct sockaddr sa;
                           struct sockaddr_in sin;
                   } u;
                 struct rtentry *rt;                  struct rtentry *rt;
   
                 bzero(&sin, sizeof(sin));                  sockaddr_in_init(&u.sin, &ip->ip_src, 0);
                 sin.sin_family = AF_INET;                  rt = rtalloc1(&u.sa, 0);
                 sin.sin_len = sizeof(struct sockaddr_in);                  if (rt == NULL || rt->rt_ifp != ifp) {
                 sin.sin_addr = ip->ip_src;  
                 rt = rtalloc1((struct sockaddr *)&sin, 0);  
                 if (!rt || rt->rt_ifp != ifp) {  
 #if 0  #if 0
                         log(LOG_WARNING, "%s: packet from 0x%x dropped "                          log(LOG_WARNING, "%s: packet from 0x%x dropped "
                             "due to ingress filter\n", if_name(&sc->gif_if),                              "due to ingress filter\n", if_name(&sc->gif_if),
                             (u_int32_t)ntohl(sin.sin_addr.s_addr));                              (u_int32_t)ntohl(u.sin.sin_addr.s_addr));
 #endif  #endif
                         if (rt)                          if (rt != NULL)
                                 rtfree(rt);                                  rtfree(rt);
                         return 0;                          return 0;
                 }                  }
Line 359  gif_encapcheck4(struct mbuf *m, int off,
Line 359  gif_encapcheck4(struct mbuf *m, int off,
         struct ifnet *ifp;          struct ifnet *ifp;
   
         /* sanity check done in caller */          /* sanity check done in caller */
         sc = (struct gif_softc *)arg;          sc = arg;
   
         m_copydata(m, 0, sizeof(ip), (void *)&ip);          m_copydata(m, 0, sizeof(ip), &ip);
         ifp = ((m->m_flags & M_PKTHDR) != 0) ? m->m_pkthdr.rcvif : NULL;          ifp = ((m->m_flags & M_PKTHDR) != 0) ? m->m_pkthdr.rcvif : NULL;
   
         return gif_validate4(&ip, sc, ifp);          return gif_validate4(&ip, sc, ifp);
Line 374  in_gif_attach(struct gif_softc *sc)
Line 374  in_gif_attach(struct gif_softc *sc)
 #ifndef GIF_ENCAPCHECK  #ifndef GIF_ENCAPCHECK
         struct sockaddr_in mask4;          struct sockaddr_in mask4;
   
         bzero(&mask4, sizeof(mask4));          memset(&mask4, 0, sizeof(mask4));
         mask4.sin_len = sizeof(struct sockaddr_in);          mask4.sin_len = sizeof(struct sockaddr_in);
         mask4.sin_addr.s_addr = ~0;          mask4.sin_addr.s_addr = ~0;
   

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

CVSweb <webmaster@jp.NetBSD.org>