From patchwork Sat Feb 13 15:25:14 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: jamal X-Patchwork-Id: 45254 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.180.67]) by ozlabs.org (Postfix) with ESMTP id 57F60B7C98 for ; Sun, 14 Feb 2010 02:26:51 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755552Ab0BMPZZ (ORCPT ); Sat, 13 Feb 2010 10:25:25 -0500 Received: from qw-out-2122.google.com ([74.125.92.25]:21214 "EHLO qw-out-2122.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752744Ab0BMPZY (ORCPT ); Sat, 13 Feb 2010 10:25:24 -0500 Received: by qw-out-2122.google.com with SMTP id 5so206978qwi.37 for ; Sat, 13 Feb 2010 07:25:23 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:subject:from:reply-to :to:cc:content-type:date:message-id:mime-version:x-mailer; bh=U8qwPJco6qB9LXJlGU+KVLUvZrXzHQ9/BYb73C5Hah4=; b=lLMc6zCyvdEBNUKWpAz4Ldg267+xZf6urdXZtPFTxe3TJkVYnysSBmNX911Jl7x2AI Lc9vkBTLyUfZjHgUO/rH4uuHmqXrP1apjA5a5C5hSUoJXS+MrGnyCQ6q8uxnjLnHIaPb 9ARyxw9ODgeCgtdk6RDNTzzGStVuqTe3ufmiE= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:subject:from:reply-to:to:cc:content-type:date:message-id :mime-version:x-mailer; b=CwZkS1OxHM3obdWLW2GH6h/cgEzYLYz8K1Rg+LFhNbeRXLiYL9HYWYikrv/1CPEOd7 ffmVn1W1WQ6F9u7Ttzg4f+QiiDhhp3Z2t9+eJi6COBlNB1trQ0Cq3aIMRsxNpXhg9Tl6 37irt4vTYqjCa5Wc6SWblk0Xh5abWQy26ExwM= Received: by 10.224.71.212 with SMTP id i20mr1358236qaj.207.1266074716120; Sat, 13 Feb 2010 07:25:16 -0800 (PST) Received: from ?10.0.0.26? (CPE0030ab124d2f-CM001bd7a7f1a0.cpe.net.cable.rogers.com [99.240.66.42]) by mx.google.com with ESMTPS id 2sm5395256qwi.25.2010.02.13.07.25.14 (version=SSLv3 cipher=RC4-MD5); Sat, 13 Feb 2010 07:25:15 -0800 (PST) Subject: [PATCH] iputils: ping by mark From: jamal Reply-To: hadi@cyberus.ca To: YOSHIFUJI Hideaki Cc: netdev@vger.kernel.org Date: Sat, 13 Feb 2010 10:25:14 -0500 Message-Id: <1266074714.6776.28.camel@bigi> Mime-Version: 1.0 X-Mailer: Evolution 2.26.1 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org I am CCing this to netdev. Can someone help me poke on Yoshifuji-san? I cant reach him using electrons or complex physical molecules... cheers, jamal commit 7afb1e52ecc8bda3677f8b7db8433486936d473f Author: Jamal Hadi Salim Date: Mon Oct 12 16:59:27 2009 -0400 [PATCH] iputils: ping by mark This extends ping to send a packet out based on a given mark using -m option. Useful with policy routing to take different paths to same destination .. Signed-off-by: Jamal Hadi Salim diff --git a/ping.c b/ping.c index b67cff4..5c913e0 100644 --- a/ping.c +++ b/ping.c @@ -1216,7 +1216,7 @@ void usage(void) fprintf(stderr, "Usage: ping [-LRUbdfnqrvVaA] [-c count] [-i interval] [-w deadline]\n" " [-p pattern] [-s packetsize] [-t ttl] [-I interface or address]\n" -" [-M mtu discovery hint] [-S sndbuf]\n" +" [-M mtu discovery hint] [-m mark] [-S sndbuf]\n" " [ -T timestamp option ] [ -Q tos ] [hop1 ...] destination\n"); exit(2); } diff --git a/ping_common.c b/ping_common.c index be36cbd..b1cc9fc 100644 --- a/ping_common.c +++ b/ping_common.c @@ -4,6 +4,7 @@ int options; +int mark; int sndbuf; int ttl; int rtt; @@ -141,6 +142,17 @@ void common_options(int ch) options |= F_INTERVAL; break; } + case 'm': + { + char *endp; + mark = (int)strtoul(optarg, &endp, 10); + if (mark < 0 || *endp != '\0') { + fprintf(stderr, "mark cannot be negative"); + exit(2); + } + options |= F_MARK; + break; + } case 'w': deadline = atoi(optarg); if (deadline < 0) { @@ -442,6 +454,15 @@ void setup(int icmp_sock) fprintf(stderr, "Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP\n"); } #endif + if (options & F_MARK) { + if (setsockopt(icmp_sock, SOL_SOCKET, SO_MARK, + &mark, sizeof(mark)) == -1) { + /* we probably dont wanna exit since old kernels + * dont support mark .. + */ + fprintf(stderr, "Warning: Failed to set mark %d\n", mark); + } + } /* Set some SNDTIMEO to prevent blocking forever * on sends, when device is too slow or stalls. Just put limit diff --git a/ping_common.h b/ping_common.h index 5b80118..466792e 100644 --- a/ping_common.h +++ b/ping_common.h @@ -60,6 +60,7 @@ extern int options; #define F_STRICTSOURCE 0x8000 #define F_NOLOOP 0x10000 #define F_TTL 0x20000 +#define F_MARK 0x40000 /* * MAX_DUP_CHK is the number of bits in received table, i.e. the maximum @@ -118,9 +119,9 @@ case 'a': case 'U': case 'c': case 'd': \ case 'f': case 'i': case 'w': case 'l': \ case 'S': case 'n': case 'p': case 'q': \ case 'r': case 's': case 'v': case 'L': \ -case 't': case 'A': case 'W': case 'B': +case 't': case 'A': case 'W': case 'B': case 'm': -#define COMMON_OPTSTR "h?VQ:I:M:aUc:dfi:w:l:S:np:qrs:vLt:AW:B" +#define COMMON_OPTSTR "h?VQ:I:M:aUc:dfi:w:l:S:np:qrs:vLt:AW:Bm:" /*