From patchwork Thu Dec 20 14:31:53 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Amerigo Wang X-Patchwork-Id: 207671 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 824DB2C008E for ; Fri, 21 Dec 2012 01:32:10 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751228Ab2LTOcI (ORCPT ); Thu, 20 Dec 2012 09:32:08 -0500 Received: from mx1.redhat.com ([209.132.183.28]:17779 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751036Ab2LTOcD (ORCPT ); Thu, 20 Dec 2012 09:32:03 -0500 Received: from int-mx10.intmail.prod.int.phx2.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.23]) by mx1.redhat.com (8.14.4/8.14.4) with ESMTP id qBKEW2Zd000769 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-SHA bits=256 verify=OK); Thu, 20 Dec 2012 09:32:02 -0500 Received: from cr0.redhat.com (vpn1-112-173.nay.redhat.com [10.66.112.173]) by int-mx10.intmail.prod.int.phx2.redhat.com (8.14.4/8.14.4) with ESMTP id qBKEVxfC023957; Thu, 20 Dec 2012 09:32:00 -0500 From: Cong Wang To: netdev@vger.kernel.org Cc: bridge@lists.linux-foundation.org, Cong Wang , Stephen Hemminger Subject: [PATCH 1/3] iproute2: distinguish permanent and temporary mdb entries Date: Thu, 20 Dec 2012 22:31:53 +0800 Message-Id: <1356013915-20835-1-git-send-email-amwang@redhat.com> X-Scanned-By: MIMEDefang 2.68 on 10.5.11.23 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org This patch adds a flag to mdb entries so that we can distinguish permanent entries with temporary ones. Cc: Stephen Hemminger Signed-off-by: Cong Wang --- bridge/mdb.c | 24 +++++++++++++++--------- include/linux/if_bridge.h | 3 +++ 2 files changed, 18 insertions(+), 9 deletions(-) diff --git a/bridge/mdb.c b/bridge/mdb.c index 121ce9c..6217c5f 100644 --- a/bridge/mdb.c +++ b/bridge/mdb.c @@ -28,7 +28,7 @@ int filter_index; static void usage(void) { - fprintf(stderr, "Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP\n"); + fprintf(stderr, "Usage: bridge mdb { add | del } dev DEV port PORT grp GROUP [permanent | temp]\n"); fprintf(stderr, " bridge mdb {show} [ dev DEV ]\n"); exit(-1); } @@ -53,13 +53,15 @@ static void print_mdb_entry(FILE *f, int ifindex, struct br_mdb_entry *e) SPRINT_BUF(abuf); if (e->addr.proto == htons(ETH_P_IP)) - fprintf(f, "bridge %s port %s group %s\n", ll_index_to_name(ifindex), + fprintf(f, "bridge %s port %s group %s %s\n", ll_index_to_name(ifindex), ll_index_to_name(e->ifindex), - inet_ntop(AF_INET, &e->addr.u.ip4, abuf, sizeof(abuf))); + inet_ntop(AF_INET, &e->addr.u.ip4, abuf, sizeof(abuf)), + (e->state & MDB_PERMANENT) ? "permanent" : "temp"); else - fprintf(f, "bridge %s port %s group %s\n", ll_index_to_name(ifindex), + fprintf(f, "bridge %s port %s group %s %s\n", ll_index_to_name(ifindex), ll_index_to_name(e->ifindex), - inet_ntop(AF_INET6, &e->addr.u.ip6, abuf, sizeof(abuf))); + inet_ntop(AF_INET6, &e->addr.u.ip6, abuf, sizeof(abuf)), + (e->state & MDB_PERMANENT) ? "permanent" : "temp"); } static void br_print_mdb_entry(FILE *f, int ifindex, struct rtattr *attr) @@ -179,11 +181,15 @@ static int mdb_modify(int cmd, int flags, int argc, char **argv) } else if (strcmp(*argv, "grp") == 0) { NEXT_ARG(); grp = *argv; + } else if (strcmp(*argv, "port") == 0) { + NEXT_ARG(); + p = *argv; + } else if (strcmp(*argv, "permanent") == 0) { + if (cmd == RTM_NEWMDB) + entry.state |= MDB_PERMANENT; + } else if (strcmp(*argv, "temp") == 0) { + ;/* nothing */ } else { - if (strcmp(*argv, "port") == 0) { - NEXT_ARG(); - p = *argv; - } if (matches(*argv, "help") == 0) usage(); } diff --git a/include/linux/if_bridge.h b/include/linux/if_bridge.h index b3b6a67..aac8b8c 100644 --- a/include/linux/if_bridge.h +++ b/include/linux/if_bridge.h @@ -163,6 +163,9 @@ struct br_port_msg { struct br_mdb_entry { __u32 ifindex; +#define MDB_TEMPORARY 0 +#define MDB_PERMANENT 1 + __u8 state; struct { union { __be32 ip4;