iphtadd()

iphtadd()

概要

引数

実装

  610: void
  611: iphtadd(Ipht *ht, Conv *c)
  612: {
  613:         ulong hv;
  614:         Iphash *h;
  615: 
  616:         hv = iphash(c->raddr, c->rport, c->laddr, c->lport);
  617:         h = smalloc(sizeof(*h));
  618:         if(ipcmp(c->raddr, IPnoaddr) != 0)
  • リモートアドレスがIPnoaddrに一致しない(リモートアドレスがexact)場合は,h->matchをIPmatchexactにセットする.
  • 詳細はipcmp()を参照
  619:                 h->match = IPmatchexact;
  620:         else {
  621:                 if(ipcmp(c->laddr, IPnoaddr) != 0){
  622:                         if(c->lport == 0)
  623:                                 h->match = IPmatchaddr;
  624:                         else
  625:                                 h->match = IPmatchpa;
  626:                 } else {
  627:                         if(c->lport == 0)
  628:                                 h->match = IPmatchany;
  629:                         else
  630:                                 h->match = IPmatchport;
  631:                 }
  632:         }
  633:         h->c = c;
  634: 
  635:         lock(ht);
  636:         h->next = ht->tab[hv];
  637:         ht->tab[hv] = h;
  638:         unlock(ht);
  639: }