[BACK]Return to ip_input.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/ip_input.c between version 1.95 and 1.99

version 1.95, 2000/01/31 14:18:54 version 1.99, 2000/02/12 18:00:00
Line 397  ip_input(struct mbuf *m)
Line 397  ip_input(struct mbuf *m)
                 }                  }
                 ip = mtod(m, struct ip *);                  ip = mtod(m, struct ip *);
         }          }
   
         /*          /*
          * we drop packets that have a multicast address as source           * RFC1122: packets with a multicast source address are
          * as wanted by rfc 1112           * not allowed.
          */           */
         if (IN_MULTICAST(ip->ip_src.s_addr)) {          if (IN_MULTICAST(ip->ip_src.s_addr)) {
                   /* XXX stat */
                 goto bad;                  goto bad;
         }          }
   
Line 488  ip_input(struct mbuf *m)
Line 490  ip_input(struct mbuf *m)
         /*          /*
          * Check our list of addresses, to see if the packet is for us.           * Check our list of addresses, to see if the packet is for us.
          */           */
         INADDR_TO_IA(ip->ip_dst, ia);          for (ia = IN_IFADDR_HASH(ip->ip_dst.s_addr).lh_first;
                ia != NULL;
                ia = ia->ia_hash.le_next) {
                   if (in_hosteq(ia->ia_addr.sin_addr, ip->ip_dst)) {
                           if ((ia->ia_ifp->if_flags & IFF_UP) != 0)
                                   break;
                           else {
                                   icmp_error(m, ICMP_UNREACH, ICMP_UNREACH_HOST,
                                       0, m->m_pkthdr.rcvif);
                                   return;
                           }
                   }
           }
         if (ia != NULL)          if (ia != NULL)
                 goto ours;                  goto ours;
         if (m->m_pkthdr.rcvif->if_flags & IFF_BROADCAST) {          if (m->m_pkthdr.rcvif->if_flags & IFF_BROADCAST) {
Line 995  ip_dooptions(m)
Line 1009  ip_dooptions(m)
                          */                           */
                         bcopy((caddr_t)(cp + off), (caddr_t)&ipaddr.sin_addr,                          bcopy((caddr_t)(cp + off), (caddr_t)&ipaddr.sin_addr,
                             sizeof(ipaddr.sin_addr));                              sizeof(ipaddr.sin_addr));
                         if (opt == IPOPT_SSRR) {                          if (opt == IPOPT_SSRR)
 #define INA     struct in_ifaddr *                                  ia = ifatoia(ifa_ifwithaddr(sintosa(&ipaddr)));
 #define SA      struct sockaddr *                          else
                             ia = (INA)ifa_ifwithladdr((SA)&ipaddr);  
                         } else  
                                 ia = ip_rtaddr(ipaddr.sin_addr);                                  ia = ip_rtaddr(ipaddr.sin_addr);
                         if (ia == 0) {                          if (ia == 0) {
                                 type = ICMP_UNREACH;                                  type = ICMP_UNREACH;
Line 1033  ip_dooptions(m)
Line 1045  ip_dooptions(m)
                          * locate outgoing interface; if we're the destination,                           * locate outgoing interface; if we're the destination,
                          * use the incoming interface (should be same).                           * use the incoming interface (should be same).
                          */                           */
                         if ((ia = (INA)ifa_ifwithaddr((SA)&ipaddr)) == 0 &&                          if ((ia = ifatoia(ifa_ifwithaddr(sintosa(&ipaddr))))
                             (ia = ip_rtaddr(ipaddr.sin_addr)) == 0) {                              == NULL &&
                               (ia = ip_rtaddr(ipaddr.sin_addr)) == NULL) {
                                 type = ICMP_UNREACH;                                  type = ICMP_UNREACH;
                                 code = ICMP_UNREACH_HOST;                                  code = ICMP_UNREACH_HOST;
                                 goto bad;                                  goto bad;
Line 1065  ip_dooptions(m)
Line 1078  ip_dooptions(m)
                                     sizeof(struct in_addr) > ipt->ipt_len)                                      sizeof(struct in_addr) > ipt->ipt_len)
                                         goto bad;                                          goto bad;
                                 ipaddr.sin_addr = dst;                                  ipaddr.sin_addr = dst;
                                 ia = (INA)ifaof_ifpforaddr((SA)&ipaddr,                                  ia = ifatoia(ifaof_ifpforaddr(sintosa(&ipaddr),
                                                             m->m_pkthdr.rcvif);                                      m->m_pkthdr.rcvif));
                                 if (ia == 0)                                  if (ia == 0)
                                         continue;                                          continue;
                                 bcopy((caddr_t)&ia->ia_addr.sin_addr,                                  bcopy((caddr_t)&ia->ia_addr.sin_addr,
Line 1080  ip_dooptions(m)
Line 1093  ip_dooptions(m)
                                         goto bad;                                          goto bad;
                                 bcopy((caddr_t)sin, (caddr_t)&ipaddr.sin_addr,                                  bcopy((caddr_t)sin, (caddr_t)&ipaddr.sin_addr,
                                     sizeof(struct in_addr));                                      sizeof(struct in_addr));
                                 if (ifa_ifwithaddr((SA)&ipaddr) == 0)                                  if (ifatoia(ifa_ifwithaddr(sintosa(&ipaddr)))
                                       == NULL)
                                         continue;                                          continue;
                                 ipt->ipt_ptr += sizeof(struct in_addr);                                  ipt->ipt_ptr += sizeof(struct in_addr);
                                 break;                                  break;

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

CVSweb <webmaster@jp.NetBSD.org>