+static bool
+system_rtn_aton(const char *src, unsigned int *dst)
+{
+ char *e;
+ unsigned int n;
+
+ if (!strcmp(src, "local"))
+ n = RTN_LOCAL;
+ else if (!strcmp(src, "nat"))
+ n = RTN_NAT;
+ else if (!strcmp(src, "broadcast"))
+ n = RTN_BROADCAST;
+ else if (!strcmp(src, "anycast"))
+ n = RTN_ANYCAST;
+ else if (!strcmp(src, "multicast"))
+ n = RTN_MULTICAST;
+ else if (!strcmp(src, "prohibit"))
+ n = RTN_PROHIBIT;
+ else if (!strcmp(src, "unreachable"))
+ n = RTN_UNREACHABLE;
+ else if (!strcmp(src, "blackhole"))
+ n = RTN_BLACKHOLE;
+ else if (!strcmp(src, "xresolve"))
+ n = RTN_XRESOLVE;
+ else if (!strcmp(src, "unicast"))
+ n = RTN_UNICAST;
+ else if (!strcmp(src, "throw"))
+ n = RTN_THROW;
+ else if (!strcmp(src, "failed_policy"))
+ n = RTN_FAILED_POLICY;
+ else {
+ n = strtoul(src, &e, 0);
+ if (!e || *e || e == src || n > 255)
+ return false;
+ }
+
+ *dst = n;
+ return true;
+}
+