/* 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; }
/* 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; }