Exemple #1
0
ifchgcb_t *
ifchgcb (cbv cb)
{
  if (!lazy) {
    if (!myipaddrs (&ifchg_addrs))
      fatal ("myipaddrs: %m\n");
    lazy = lazycb (60, wrap (ifchgcb_test));
  }
  ifchgcb_t *chg = New ifchgcb_t (cb);
  chglist.insert_head (chg);
  return chg;
}
Exemple #2
0
void
ifchgcb_test ()
{
  vec<in_addr> newaddrs;
  if (!myipaddrs (&newaddrs))
    return;
  if (newaddrs.size () == ifchg_addrs.size ()
      && !memcmp (newaddrs.base (), ifchg_addrs.base (),
		  ifchg_addrs.size () * sizeof (in_addr)))
    return;
  ifchg_addrs.swap (newaddrs);
  ++ifchg_count;
  list<ifchgcb_t, &ifchgcb_t::link> olist;
  chglist.swap (olist);
  while (ifchgcb_t *chg = olist.first) {
    olist.remove (chg);
    chglist.insert_head (chg);
    (*chg->cb) ();
  }
}
Exemple #3
0
chord_hostname
my_addr () {
  vec<in_addr> addrs;
  if (!myipaddrs (&addrs))
    fatal ("my_addr: cannot find my IP address.\n");

  in_addr *addr = addrs.base ();
  in_addr *loopback = 0;
  while (addr < addrs.lim ()) {
    if (ntohl (addr->s_addr) == INADDR_LOOPBACK) loopback = addr;
    else break;
    addr++;
  }
  if (addr >= addrs.lim () && (loopback == NULL))
    fatal ("my_addr: cannot find my IP address.\n");
  if (addr >= addrs.lim ()) {
    warnx << "my_addr: use loopback address as my address\n";
    addr = loopback;
  }
  str ids = inet_ntoa (*addr);
  return ids;
}