Example #1
0
mpls_bool mpls_policy_address_export_check(mpls_instance_handle handle,
  mpls_inet_addr *addr) {
  struct ldp *ldp = handle;
  mpls_bool flag = MPLS_BOOL_FALSE; 
  struct interface *ifp;
  struct in_addr in;

  in.s_addr = htonl(addr->u.ipv4);

  switch (ldp->address) {
    case LDP_ADDRESS_LDP:
      if ((ifp = if_lookup_exact_address(in)) && 
         (struct ldp_interface*)(ifp->info)) {
        flag = MPLS_BOOL_TRUE;
      }
      /* fall through */
    case LDP_ADDRESS_LSRID:
      if (in.s_addr == router_id.u.prefix4.s_addr) {
        flag = MPLS_BOOL_TRUE;
      }
      break;
    case LDP_ADDRESS_ALL:
      flag = MPLS_BOOL_TRUE;
      break;
  }
  return flag;
}
Example #2
0
static struct interface *
rip2IfLookup (struct variable *v, oid name[], size_t *length, 
	      struct in_addr *addr, int exact)
{
  int len;
  struct interface *ifp;
  
  if (exact)
    {
      /* Check the length. */
      if (*length - v->namelen != sizeof (struct in_addr))
	return NULL;

      oid2in_addr (name + v->namelen, sizeof (struct in_addr), addr);

      return if_lookup_exact_address (*addr);
    }
  else
    {
      len = *length - v->namelen;
      if (len > 4) len = 4;

      oid2in_addr (name + v->namelen, len, addr);

      ifp = rip_ifaddr_lookup_next (addr);

      if (ifp == NULL)
	return NULL;

      oid_copy_addr (name + v->namelen, addr, sizeof (struct in_addr));

      *length = v->namelen + sizeof (struct in_addr);

      return ifp;
    }
  return NULL;
}