#ifndef VTYSH_EXTRACT_PL
#include "staticd/static_vty_clippy.c"
#endif
-
static struct static_vrf *static_vty_get_unknown_vrf(struct vty *vty,
const char *vrf_name)
{
return CMD_WARNING_CONFIG_FAILED;
}
gatep = &gate;
+
+ if (afi == AFI_IP && !negate) {
+ if (if_lookup_exact_address(&gatep->ipv4, AF_INET,
+ svrf->vrf->vrf_id))
+ if (vty)
+ vty_out(vty,
+ "%% Warning!! Local connected address is configured as Gateway IP(%s)\n",
+ gate_str);
+ } else if (afi == AFI_IP6 && !negate) {
+ if (if_lookup_exact_address(&gatep->ipv6, AF_INET6,
+ svrf->vrf->vrf_id))
+ if (vty)
+ vty_out(vty,
+ "%% Warning!! Local connected address is configured as Gateway IPv6(%s)\n",
+ gate_str);
+ }
+
}
if (gate_str == NULL && ifname == NULL)
uint8_t nh_num;
};
+/* API to check whether the configured nexthop address is
+ * one of its local connected address or not.
+ */
+static bool
+static_nexthop_is_local(vrf_id_t vrfid, struct prefix *addr, int family)
+{
+ if (family == AF_INET) {
+ if (if_lookup_exact_address(&addr->u.prefix4,
+ AF_INET,
+ vrfid))
+ return true;
+ } else if (family == AF_INET6) {
+ if (if_lookup_exact_address(&addr->u.prefix6,
+ AF_INET6,
+ vrfid))
+ return true;
+ }
+ return false;
+}
static int static_zebra_nexthop_update(ZAPI_CALLBACK_ARGS)
{
struct static_nht_data *nhtd, lookup;
if (nhr.prefix.family == AF_INET6)
afi = AFI_IP6;
+ if (nhr.type == ZEBRA_ROUTE_CONNECT) {
+ if (static_nexthop_is_local(vrf_id, &nhr.prefix,
+ nhr.prefix.family))
+ nhr.nexthop_num = 0;
+ }
+
memset(&lookup, 0, sizeof(lookup));
lookup.nh = &nhr.prefix;
lookup.nh_vrf_id = vrf_id;