int do_ipneigh(int argc, char **argv) { if (argc > 0) { if (matches(*argv, "add") == 0) return ipneigh_modify(RTM_NEWNEIGH, NLM_F_CREATE|NLM_F_EXCL, argc-1, argv+1); if (matches(*argv, "change") == 0 || strcmp(*argv, "chg") == 0) return ipneigh_modify(RTM_NEWNEIGH, NLM_F_REPLACE, argc-1, argv+1); if (matches(*argv, "replace") == 0) return ipneigh_modify(RTM_NEWNEIGH, NLM_F_CREATE|NLM_F_REPLACE, argc-1, argv+1); if (matches(*argv, "delete") == 0) return ipneigh_modify(RTM_DELNEIGH, 0, argc-1, argv+1); if (matches(*argv, "get") == 0) { fprintf(stderr, "Sorry, \"neigh get\" is not implemented :-(\n"); return -1; } if (matches(*argv, "show") == 0 || matches(*argv, "lst") == 0 || matches(*argv, "list") == 0) return do_show_or_flush(argc-1, argv+1, 0); if (matches(*argv, "flush") == 0) return do_show_or_flush(argc-1, argv+1, 1); if (matches(*argv, "help") == 0) usage(); } else return do_show_or_flush(0, NULL, 0); fprintf(stderr, "Command \"%s\" is unknown, try \"ip neigh help\".\n", *argv); exit(-1); }
void neigh_remove(char *ll_addr, u_int32 ip, char *iface) { DEBUG_MSG("neigh remove %s %s %s", ha_ntoa(ll_addr), inet_ntoa(*(struct in_addr *)&ip), iface); ipneigh_modify(RTM_DELNEIGH, 0, 0, ll_addr, ip, iface); }
void neigh_add(char *ll_addr, u_int32 ip, char *iface, int nud) { DEBUG_MSG("neigh add %s %s %s", ha_ntoa(ll_addr), inet_ntoa(*(struct in_addr *)&ip), iface); ipneigh_modify(RTM_NEWNEIGH, NLM_F_CREATE|NLM_F_REPLACE, nud, ll_addr, ip, iface); }