From patchwork Mon Apr 13 17:41:45 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Cosmin Ratiu X-Patchwork-Id: 25911 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by ozlabs.org (Postfix) with ESMTP id A209DDE11C for ; Tue, 14 Apr 2009 03:41:49 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1750827AbZDMRln (ORCPT ); Mon, 13 Apr 2009 13:41:43 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1750792AbZDMRln (ORCPT ); Mon, 13 Apr 2009 13:41:43 -0400 Received: from ixro-out-rtc.ixiacom.com ([92.87.192.98]:3451 "EHLO ixro-ex1.ixiacom.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1750782AbZDMRlm (ORCPT ); Mon, 13 Apr 2009 13:41:42 -0400 Received: from [10.205.9.78] ([10.205.9.78]) by ixro-ex1.ixiacom.com with Microsoft SMTPSVC(6.0.3790.3959); Mon, 13 Apr 2009 20:41:40 +0300 Message-ID: <49E37959.7030502@ixiacom.com> Date: Mon, 13 Apr 2009 20:41:45 +0300 From: Cosmin Ratiu User-Agent: Thunderbird 2.0.0.21 (X11/20090318) MIME-Version: 1.0 To: netdev@vger.kernel.org Subject: SIOCSARP auto resolve X-OriginalArrivalTime: 13 Apr 2009 17:41:40.0539 (UTC) FILETIME=[1A44A0B0:01C9BC5F] Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Hello, Is there a way to make the kernel send an ARP request from a user space program? If not, then I'd like to hear your opinions on the patch below, which extends SIOCSARP with a flag ATF_AUTORESOLVE that when set, will send out an ARP request instead of adding an entry to the cache. Thanks, Cosmin. --- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- include/linux/if_arp.h +++ include/linux/if_arp.h @@ -124,6 +124,7 @@ #define ATF_NETMASK 0x20 /* want to use a netmask (only for proxy entries) */ #define ATF_DONTPUB 0x40 /* don't answer this addresses */ +#define ATF_AUTORESOLVE 0x80 /* send ARP request instead */ /* * This structure defines an ethernet arp header. --- net/ipv4/arp.c +++ net/ipv4/arp.c @@ -1028,13 +1028,18 @@ neigh = __neigh_lookup_errno(&arp_tbl, &ip, dev); err = PTR_ERR(neigh); if (!IS_ERR(neigh)) { - unsigned state = NUD_STALE; - if (r->arp_flags & ATF_PERM) - state = NUD_PERMANENT; - err = neigh_update(neigh, (r->arp_flags&ATF_COM) ? - r->arp_ha.sa_data : NULL, state, - NEIGH_UPDATE_F_OVERRIDE| - NEIGH_UPDATE_F_ADMIN); + if (r->arp_flags & ATF_AUTORESOLVE) { + neigh_event_send(neigh, NULL); + err = 0; + } else { + unsigned state = NUD_STALE; + if (r->arp_flags & ATF_PERM) + state = NUD_PERMANENT; + err = neigh_update(neigh, (r->arp_flags&ATF_COM) ? + r->arp_ha.sa_data : NULL, state, + NEIGH_UPDATE_F_OVERRIDE| + NEIGH_UPDATE_F_ADMIN); + } neigh_release(neigh); } return err;