From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-qt1-f181.google.com (mail-qt1-f181.google.com [209.85.160.181]) by dpdk.org (Postfix) with ESMTP id 3AB521B1C1 for ; Thu, 27 Sep 2018 02:34:13 +0200 (CEST) Received: by mail-qt1-f181.google.com with SMTP id z14-v6so993249qtn.2 for ; Wed, 26 Sep 2018 17:34:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pLLLNP8XDuEHY0ULln1BKY4tSmTgFpDovLSjwzzDUAk=; b=LlaCbo7rYsD/8kM1wwqYExhzMzd9F67Z9Tbtv058GLS5VL41FyvyC7DDskLxWWvRgV egEjixqAUymsfrVyclqBZHPr5qtCdJGhQ6u8V0AN8U6xukWdwebjYhGBgt6zOU6ZbgjK 3eJGn6YY1UYfr3LoqbD0eaMnlFCcnvuEZhyLT/9CZqMs5sG77RulNwaWqE03SiqjSK2T JvnBBLmvvFhJlJOOM0cOXVtb9zRnaM12zvTt4jjdrcQKIlJeJOvPf3S9qyTSf9vuC8cC ECu/CKwaTRRdzwK4NUOLJBtQFosq/mLUShL8ImA+iRCvwgK2g1K2PhNiTDGQ6t8iluAR BkOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=pLLLNP8XDuEHY0ULln1BKY4tSmTgFpDovLSjwzzDUAk=; b=FhvUZ+OmhjZLifR1M1rauTtOgisXGl6LEZ1x+RGQAqEO/VOZ8P/Ob4JRas9snqS3yT p1/ob5OvC5yq9yyuqtFqG9zdEllonbYi0VnXlhJhb6nuQU7dadz8jK0hER1uXPm6SUk1 NL+LjzYPQQ87oRdt/Dh2uNXza226HEUoF6+0E135/8NIWLDEcByn4dZ3Flsp/oM/M6SP 8kWMjWSEYmCL0rs4eTO5IKrSfj4BpptFaelQkIzBNTNCkSAsTtKVXjaQn5PxgzIkvEAh LPXjR3GJBMVt1InqFRi9g5WVd3Tp6KyXegR6sqLm3P56fGybOAxy7Xh4bWXZKvvKANIG medw== X-Gm-Message-State: ABuFfoi24UipoBYfIzrgI33vlHQNLSMv7zylVDfZh0gUJxORSg+NuPoo GxifwcUeT1QZS11C8Sr0gr68pIde X-Google-Smtp-Source: ACcGV6341WjEpt1F6u3a9Jtnp9Vf5dV4QaRC/qb5mc578RLX5pRRFAvK5gwPFC9yYW5jnsBNn5vqDg== X-Received: by 2002:ac8:29ef:: with SMTP id 44-v6mr6338172qtt.174.1538008452235; Wed, 26 Sep 2018 17:34:12 -0700 (PDT) Received: from snappy.local.lan (189-46-124-178.dsl.telesp.net.br. [189.46.124.178]) by smtp.gmail.com with ESMTPSA id x26-v6sm463053qth.15.2018.09.26.17.34.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Wed, 26 Sep 2018 17:34:11 -0700 (PDT) Sender: Dan Gora From: Dan Gora To: dev@dpdk.org Cc: Igor Ryzhov , Stephen Hemminger , Ferruh Yigit , Dan Gora Date: Wed, 26 Sep 2018 21:32:54 -0300 Message-Id: <20180927003256.6901-5-dg@adax.com> X-Mailer: git-send-email 2.19.0 In-Reply-To: <20180927003256.6901-1-dg@adax.com> References: <20180911232906.18352-1-dg@adax.com> <20180927003256.6901-1-dg@adax.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Subject: [dpdk-dev] [PATCH v3 4/6] examples/kni: monitor and update link status continually X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 27 Sep 2018 00:34:13 -0000 Update KNI example to continuously monitor the Ethernet link status of the physical link and update the link status of the corresponding interfaces with rte_kni_update_link(). Signed-off-by: Dan Gora --- examples/kni/Makefile | 2 ++ examples/kni/main.c | 73 +++++++++++++++++-------------------------- 2 files changed, 31 insertions(+), 44 deletions(-) diff --git a/examples/kni/Makefile b/examples/kni/Makefile index 7e19d2e2a..dd90d7d73 100644 --- a/examples/kni/Makefile +++ b/examples/kni/Makefile @@ -20,6 +20,7 @@ static: build/$(APP)-static PC_FILE := $(shell pkg-config --path libdpdk) CFLAGS += -O3 $(shell pkg-config --cflags libdpdk) +CFLAGS += -DALLOW_EXPERIMENTAL_API LDFLAGS_SHARED = $(shell pkg-config --libs libdpdk) LDFLAGS_STATIC = -Wl,-Bstatic $(shell pkg-config --static --libs libdpdk) @@ -54,6 +55,7 @@ please change the definition of the RTE_TARGET environment variable) endif CFLAGS += -O3 +CFLAGS += -DALLOW_EXPERIMENTAL_API CFLAGS += $(WERROR_FLAGS) include $(RTE_SDK)/mk/rte.extapp.mk diff --git a/examples/kni/main.c b/examples/kni/main.c index 80c401c51..be721b9cc 100644 --- a/examples/kni/main.c +++ b/examples/kni/main.c @@ -107,6 +107,8 @@ static uint32_t ports_mask = 0; /* Ports set in promiscuous mode off by default. */ static int promiscuous_on = 0; +static int kni_running; + /* Structure type for recording kni interface specific stats */ struct kni_interface_stats { /* number of pkts received from NIC, and sent to KNI */ @@ -619,59 +621,31 @@ init_port(uint16_t port) rte_eth_promiscuous_enable(port); } -/* Check the link status of all ports in up to 9s, and print them finally */ -static void -check_all_ports_link_status(uint32_t port_mask) +/* + * Monitor the link status of all ports and update the + * corresponding KNI interface(s) + */ +static void * +check_all_ports_link_status(void *arg) { -#define CHECK_INTERVAL 100 /* 100ms */ -#define MAX_CHECK_TIME 90 /* 9s (90 * 100ms) in total */ uint16_t portid; - uint8_t count, all_ports_up, print_flag = 0; struct rte_eth_link link; + unsigned int i; + struct kni_port_params **p = kni_port_params_array; + (void) arg; - printf("\nChecking link status\n"); - fflush(stdout); - for (count = 0; count <= MAX_CHECK_TIME; count++) { - all_ports_up = 1; + while (kni_running) { + rte_delay_ms(100); RTE_ETH_FOREACH_DEV(portid) { - if ((port_mask & (1 << portid)) == 0) + if ((ports_mask & (1 << portid)) == 0) continue; memset(&link, 0, sizeof(link)); rte_eth_link_get_nowait(portid, &link); - /* print link status if flag set */ - if (print_flag == 1) { - if (link.link_status) - printf( - "Port%d Link Up - speed %uMbps - %s\n", - portid, link.link_speed, - (link.link_duplex == ETH_LINK_FULL_DUPLEX) ? - ("full-duplex") : ("half-duplex\n")); - else - printf("Port %d Link Down\n", portid); - continue; - } - /* clear all_ports_up flag if any link down */ - if (link.link_status == ETH_LINK_DOWN) { - all_ports_up = 0; - break; - } - } - /* after finally printing all link status, get out */ - if (print_flag == 1) - break; - - if (all_ports_up == 0) { - printf("."); - fflush(stdout); - rte_delay_ms(CHECK_INTERVAL); - } - - /* set the print_flag if all ports up or timeout */ - if (all_ports_up == 1 || count == (MAX_CHECK_TIME - 1)) { - print_flag = 1; - printf("done\n"); + for (i = 0; i < p[portid]->nb_kni; i++) + rte_kni_update_link(p[portid]->kni[i], &link); } } + return NULL; } /* Callback for request of changing MTU */ @@ -893,6 +867,8 @@ main(int argc, char** argv) int ret; uint16_t nb_sys_ports, port; unsigned i; + void *retval; + pthread_t kni_link_tid; /* Associate signal_hanlder function with USR signals */ signal(SIGUSR1, signal_handler); @@ -947,7 +923,14 @@ main(int argc, char** argv) kni_alloc(port); } - check_all_ports_link_status(ports_mask); + + kni_running = 1; + ret = rte_ctrl_thread_create(&kni_link_tid, + "KNI link status check", NULL, + check_all_ports_link_status, NULL); + if (ret < 0) + rte_exit(EXIT_FAILURE, + "Could not create link status thread!\n"); /* Launch per-lcore function on every lcore */ rte_eal_mp_remote_launch(main_loop, NULL, CALL_MASTER); @@ -955,6 +938,8 @@ main(int argc, char** argv) if (rte_eal_wait_lcore(i) < 0) return -1; } + kni_running = 0; + pthread_join(kni_link_tid, &retval); /* Release resources */ RTE_ETH_FOREACH_DEV(port) { -- 2.19.0