Exemplo n.º 1
0
/* set metric compilation. */
static void *
route_set_metric_compile (const char *arg)
{
  u_int32_t *metric;
  int32_t ret;

  /* OSPF doesn't support the +/- in
     set metric <+/-metric> check
     Ignore the +/- component */
  if (! all_digit (arg))
    {
      if ((strncmp (arg, "+", 1) == 0 || strncmp (arg, "-", 1) == 0) &&
	  all_digit (arg+1))
	{
	  zlog_warn ("OSPF does not support 'set metric +/-'");
	  arg++;
	}
      else
	return NULL;
    }

  metric = XCALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_int32_t));
  ret = atoi (arg);

  if (ret >= 0)
    {
      *metric = (u_int32_t)ret;
      return metric;
    }

  XFREE (MTYPE_ROUTE_MAP_COMPILED, metric);
  return NULL;
}
Exemplo n.º 2
0
/*  Route map `match tag' match statement. `arg' is TAG value */
static void *
route_match_tag_compile (const char *arg)
{
  route_tag_t *tag;
  route_tag_t tmp;

  /* tag value shoud be integer. */
  if (! all_digit (arg))
    return NULL;

  tmp = atoi(arg);
  if (tmp < 1)
    return NULL;

  tag = XMALLOC (MTYPE_ROUTE_MAP_COMPILED, sizeof (u_short));

  if (!tag)
    return tag;

  *tag = tmp;

  return tag;
}