From 5b90e47b181d5d497175329bbabcba4597f650f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Tue, 29 Apr 2008 22:07:06 +0000 Subject: [PATCH] The "arp" command now supports flushing all temporary entries using the new -F option. git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@25264 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/bin/network/arp/arp.cpp | 36 ++++++++++++++++++++++++------------ 1 file changed, 24 insertions(+), 12 deletions(-) diff --git a/src/bin/network/arp/arp.cpp b/src/bin/network/arp/arp.cpp index 69a808dd84..e7e10e0eeb 100644 --- a/src/bin/network/arp/arp.cpp +++ b/src/bin/network/arp/arp.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2006, Haiku, Inc. All Rights Reserved. + * Copyright 2006-2008, Haiku, Inc. All Rights Reserved. * Distributed under the terms of the MIT License. * * Authors: @@ -32,8 +32,7 @@ enum modes { ARP_LIST = 0, ARP_DELETE, ARP_SET, - ARP_SET_FROM_FILE, - ARP_FLUSH, + ARP_SET_FROM_FILE }; @@ -62,7 +61,7 @@ parse_inet_address(const char* string, sockaddr_in& address) if (inet_aton(string, &inetAddress) != 1) return false; - address.sin_family = AF_INET; + address.sin_family = AF_INET; address.sin_len = sizeof(struct sockaddr_in); address.sin_port = 0; address.sin_addr = inetAddress; @@ -85,7 +84,7 @@ check_for_arp_syscall(void) } -void +static void usage(int status) { printf("usage: %s [] [] [] [temp] [pub]\n" @@ -95,6 +94,7 @@ usage(int status) " -d - deletes the specified ARP cache entry\n" " -a - list all entries [default]\n" " -f - read ARP entries from file\n" + " -F - flush all temporary ARP entries\n" "The ethernet address is specified by six hex bytes separated by colons.\n" "When setting a new ARP cache entry, \"temp\" creates a temporary entry\n" "that will be removed after a timeout, and \"pub\" will cause ARP to\n" @@ -107,7 +107,7 @@ usage(int status) } -bool +static bool set_flags(uint32 &flags, const char *argument) { if (!strcmp(argument, "temp") || !strcmp(argument, "temporary")) @@ -153,7 +153,7 @@ next_argument(char **_line) // #pragma mark - -void +static void list_entry(arp_control &control) { in_addr address; @@ -190,7 +190,7 @@ list_entry(arp_control &control) } -void +static void list_entries(sockaddr_in *address) { arp_control control; @@ -217,7 +217,7 @@ list_entries(sockaddr_in *address) } -void +static void delete_entry(sockaddr_in *address) { arp_control control; @@ -233,7 +233,7 @@ delete_entry(sockaddr_in *address) } -status_t +static status_t set_entry(sockaddr_in *address, uint8 *ethernetAddress, uint32 flags) { arp_control control; @@ -246,7 +246,7 @@ set_entry(sockaddr_in *address, uint8 *ethernetAddress, uint32 flags) } -int +static int set_entries_from_file(const char *filename) { FILE *file = fopen(filename, "r"); @@ -333,6 +333,16 @@ set_entries_from_file(const char *filename) } +static void +flush_entries() +{ + arp_control control; + + _kern_generic_syscall(ARP_SYSCALLS, ARP_FLUSH_ENTRIES, + &control, sizeof(arp_control)); +} + + // #pragma mark - @@ -369,7 +379,9 @@ main(int argc, char** argv) if (argc != 2) usage(1); - mode = ARP_FLUSH; + check_for_arp_syscall(); + flush_entries(); + return 0; } else if (!strcmp(argv[1], "-f")) { // set from file if (argc != 3)