From patchwork Sun Oct 30 22:51:12 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Simon Wunderlich X-Patchwork-Id: 1329 Return-Path: Received: from nick.hrz.tu-chemnitz.de (nick.hrz.tu-chemnitz.de [134.109.228.11]) by open-mesh.org (Postfix) with ESMTPS id EB47860082D for ; Sun, 30 Oct 2011 23:51:36 +0100 (CET) Authentication-Results: open-mesh.org; dkim=pass (1024-bit key) header.i=@tu-chemnitz.de; dkim-adsp=none DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tu-chemnitz.de; s=dkim2010; h=References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From; bh=kEHFxNOAMlkkoaWWVQYGV4fDij9T/VVVYhPPYLEwJQ0=; b=RGYiKtI9tYafH6D6QsXt93mnc+nYl8xB9kZLDlqKKYLw5gVcerkkNq4qffz/lYEXZRiVjo9KKpTpXNvFB0vW8aKez16rymri9sMTj4JUC64mBcAyd/17crEossokiiOhU9fzPSPQMXGiRl8qa3fDyNSOAeNCH5Ay8N18fQdVqPc=; Received: from p57aa138b.dip0.t-ipconnect.de ([87.170.19.139] helo=pandem0nium) by nick.hrz.tu-chemnitz.de with esmtpsa (TLSv1:AES256-SHA:256) (Exim 4.76) (envelope-from ) id 1RKeE3-0002q0-Bl; Sun, 30 Oct 2011 23:51:36 +0100 Received: from dotslash by pandem0nium with local (Exim 4.72) (envelope-from ) id 1RKeDw-0002he-Gi; Sun, 30 Oct 2011 23:51:28 +0100 From: Simon Wunderlich To: b.a.t.m.a.n@lists.open-mesh.org Date: Sun, 30 Oct 2011 23:51:12 +0100 Message-Id: <1320015072-10313-12-git-send-email-siwu@hrz.tu-chemnitz.de> X-Mailer: git-send-email 1.7.2.5 In-Reply-To: <1320015072-10313-1-git-send-email-siwu@hrz.tu-chemnitz.de> References: <1320015072-10313-1-git-send-email-siwu@hrz.tu-chemnitz.de> X-Spam-Score: -1.0 (-) X-Spam-Report: --- Textanalyse SpamAssassin 3.3.1 (-1.0 Punkte) Fragen an/questions to: Postmaster TU Chemnitz * -1.0 ALL_TRUSTED Passed through trusted hosts only via SMTP --- Ende Textanalyse X-Scan-Signature: 2d8e8a9a199710b5152ff1d5f251a0fb Cc: Simon Wunderlich Subject: [B.A.T.M.A.N.] [RFC 11/11] [RFC] batman-adv: get primaries address through bat_priv->own_orig X-BeenThere: b.a.t.m.a.n@lists.open-mesh.org X-Mailman-Version: 2.1.13 Precedence: list Reply-To: The list for a Better Approach To Mobile Ad-hoc Networking List-Id: The list for a Better Approach To Mobile Ad-hoc Networking List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sun, 30 Oct 2011 22:51:37 -0000 Instead of acquiring the first interfaces originator through hard interface (including referencing/dereferencing), we can use the cached value in bat_priv->own_orig. There might be some cases where this function was implicitly used to check whether there is a hard interface configured at all (i.e. if batman is active), therfore this is patch is an RFC. Signed-off-by: Simon Wunderlich --- icmp_socket.c | 12 +----------- routing.c | 25 +++---------------------- translation-table.c | 16 ++-------------- unicast.c | 9 +-------- vis.c | 20 ++------------------ 5 files changed, 9 insertions(+), 73 deletions(-) diff --git a/icmp_socket.c b/icmp_socket.c index ac3520e..86dcffd 100644 --- a/icmp_socket.c +++ b/icmp_socket.c @@ -153,7 +153,6 @@ static ssize_t bat_socket_write(struct file *file, const char __user *buff, { struct socket_client *socket_client = file->private_data; struct bat_priv *bat_priv = socket_client->bat_priv; - struct hard_iface *primary_if = NULL; struct sk_buff *skb; struct icmp_packet_rr *icmp_packet; @@ -168,13 +167,6 @@ static ssize_t bat_socket_write(struct file *file, const char __user *buff, return -EINVAL; } - primary_if = primary_if_get_selected(bat_priv); - - if (!primary_if) { - len = -EFAULT; - goto out; - } - if (len >= sizeof(struct icmp_packet_rr)) packet_len = sizeof(struct icmp_packet_rr); @@ -240,7 +232,7 @@ static ssize_t bat_socket_write(struct file *file, const char __user *buff, goto dst_unreach; memcpy(icmp_packet->orig, - primary_if->net_dev->dev_addr, ETH_ALEN); + bat_priv->own_orig, ETH_ALEN); if (packet_len == sizeof(struct icmp_packet_rr)) memcpy(icmp_packet->rr, @@ -255,8 +247,6 @@ dst_unreach: free_skb: kfree_skb(skb); out: - if (primary_if) - hardif_free_ref(primary_if); if (neigh_node) neigh_node_free_ref(neigh_node); if (orig_node) diff --git a/routing.c b/routing.c index 00e5339..5ef6f75 100644 --- a/routing.c +++ b/routing.c @@ -284,7 +284,6 @@ int recv_bat_ogm_packet(struct sk_buff *skb, struct hard_iface *hard_iface) static int recv_my_icmp_packet(struct bat_priv *bat_priv, struct sk_buff *skb, size_t icmp_len) { - struct hard_iface *primary_if = NULL; struct orig_node *orig_node = NULL; struct neigh_node *router = NULL; struct icmp_packet_rr *icmp_packet; @@ -298,10 +297,6 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv, goto out; } - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - /* answer echo request (ping) */ /* get routing information */ orig_node = orig_hash_find(bat_priv, icmp_packet->orig); @@ -319,7 +314,7 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv, icmp_packet = (struct icmp_packet_rr *)skb->data; memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN); - memcpy(icmp_packet->orig, primary_if->net_dev->dev_addr, ETH_ALEN); + memcpy(icmp_packet->orig, bat_priv->own_orig, ETH_ALEN); icmp_packet->msg_type = ECHO_REPLY; icmp_packet->ttl = TTL; @@ -327,8 +322,6 @@ static int recv_my_icmp_packet(struct bat_priv *bat_priv, ret = NET_RX_SUCCESS; out: - if (primary_if) - hardif_free_ref(primary_if); if (router) neigh_node_free_ref(router); if (orig_node) @@ -339,7 +332,6 @@ out: static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv, struct sk_buff *skb) { - struct hard_iface *primary_if = NULL; struct orig_node *orig_node = NULL; struct neigh_node *router = NULL; struct icmp_packet *icmp_packet; @@ -355,10 +347,6 @@ static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv, goto out; } - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - /* get routing information */ orig_node = orig_hash_find(bat_priv, icmp_packet->orig); if (!orig_node) @@ -375,7 +363,7 @@ static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv, icmp_packet = (struct icmp_packet *)skb->data; memcpy(icmp_packet->dst, icmp_packet->orig, ETH_ALEN); - memcpy(icmp_packet->orig, primary_if->net_dev->dev_addr, ETH_ALEN); + memcpy(icmp_packet->orig, bat_priv->own_orig, ETH_ALEN); icmp_packet->msg_type = TTL_EXCEEDED; icmp_packet->ttl = TTL; @@ -383,8 +371,6 @@ static int recv_icmp_ttl_exceeded(struct bat_priv *bat_priv, ret = NET_RX_SUCCESS; out: - if (primary_if) - hardif_free_ref(primary_if); if (router) neigh_node_free_ref(router); if (orig_node) @@ -894,7 +880,6 @@ static int check_unicast_ttvn(struct bat_priv *bat_priv, uint8_t curr_ttvn; struct orig_node *orig_node; struct ethhdr *ethhdr; - struct hard_iface *primary_if; struct unicast_packet *unicast_packet; bool tt_poss_change; @@ -931,12 +916,8 @@ static int check_unicast_ttvn(struct bat_priv *bat_priv, if (!orig_node) { if (!is_my_client(bat_priv, ethhdr->h_dest)) return 0; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - return 0; memcpy(unicast_packet->dest, - primary_if->net_dev->dev_addr, ETH_ALEN); - hardif_free_ref(primary_if); + bat_priv->own_orig, ETH_ALEN); } else { memcpy(unicast_packet->dest, orig_node->orig, ETH_ALEN); diff --git a/translation-table.c b/translation-table.c index 06a51e5..486f464 100644 --- a/translation-table.c +++ b/translation-table.c @@ -1195,14 +1195,9 @@ static int send_tt_request(struct bat_priv *bat_priv, struct sk_buff *skb = NULL; struct tt_query_packet *tt_request; struct neigh_node *neigh_node = NULL; - struct hard_iface *primary_if; struct tt_req_node *tt_req_node = NULL; int ret = 1; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - /* The new tt_req will be issued only if I'm not waiting for a * reply from the same orig_node yet */ tt_req_node = new_tt_req_node(bat_priv, dst_orig_node); @@ -1220,7 +1215,7 @@ static int send_tt_request(struct bat_priv *bat_priv, tt_request->packet_type = BAT_TT_QUERY; tt_request->version = COMPAT_VERSION; - memcpy(tt_request->src, primary_if->net_dev->dev_addr, ETH_ALEN); + memcpy(tt_request->src, bat_priv->own_orig, ETH_ALEN); memcpy(tt_request->dst, dst_orig_node->orig, ETH_ALEN); tt_request->ttl = TTL; tt_request->ttvn = ttvn; @@ -1244,8 +1239,6 @@ static int send_tt_request(struct bat_priv *bat_priv, out: if (neigh_node) neigh_node_free_ref(neigh_node); - if (primary_if) - hardif_free_ref(primary_if); if (ret) kfree_skb(skb); if (ret && tt_req_node) { @@ -1745,7 +1738,6 @@ void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client, struct sk_buff *skb = NULL; struct roam_adv_packet *roam_adv_packet; int ret = 1; - struct hard_iface *primary_if; /* before going on we have to check whether the client has * already roamed to us too many times */ @@ -1764,11 +1756,7 @@ void send_roam_adv(struct bat_priv *bat_priv, uint8_t *client, roam_adv_packet->packet_type = BAT_ROAM_ADV; roam_adv_packet->version = COMPAT_VERSION; roam_adv_packet->ttl = TTL; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - memcpy(roam_adv_packet->src, primary_if->net_dev->dev_addr, ETH_ALEN); - hardif_free_ref(primary_if); + memcpy(roam_adv_packet->src, bat_priv->own_orig, ETH_ALEN); memcpy(roam_adv_packet->dst, orig_node->orig, ETH_ALEN); memcpy(roam_adv_packet->client, client, ETH_ALEN); diff --git a/unicast.c b/unicast.c index 07d1c1d..733da47 100644 --- a/unicast.c +++ b/unicast.c @@ -220,7 +220,6 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, struct hard_iface *hard_iface, const uint8_t dstaddr[]) { struct unicast_packet tmp_uc, *unicast_packet; - struct hard_iface *primary_if; struct sk_buff *frag_skb; struct unicast_frag_packet *frag1, *frag2; int uc_hdr_len = sizeof(*unicast_packet); @@ -229,10 +228,6 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, int large_tail = 0, ret = NET_RX_DROP; uint16_t seqno; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto dropped; - frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); if (!frag_skb) goto dropped; @@ -255,7 +250,7 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, frag1->version = COMPAT_VERSION; frag1->packet_type = BAT_UNICAST_FRAG; - memcpy(frag1->orig, primary_if->net_dev->dev_addr, ETH_ALEN); + memcpy(frag1->orig, bat_priv->own_orig, ETH_ALEN); memcpy(frag2, frag1, sizeof(*frag2)); if (data_len & 1) @@ -278,8 +273,6 @@ drop_frag: dropped: kfree_skb(skb); out: - if (primary_if) - hardif_free_ref(primary_if); return ret; } diff --git a/vis.c b/vis.c index 7445413..e08ecd7 100644 --- a/vis.c +++ b/vis.c @@ -190,7 +190,6 @@ static ssize_t vis_data_read_entry(char *buff, int vis_seq_print_text(struct seq_file *seq, void *offset) { - struct hard_iface *primary_if; struct hlist_node *node; struct hlist_head *head; struct vis_info *info; @@ -209,10 +208,6 @@ int vis_seq_print_text(struct seq_file *seq, void *offset) char *buff; int compare; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - if (vis_server == VIS_TYPE_CLIENT_UPDATE) goto out; @@ -321,8 +316,6 @@ int vis_seq_print_text(struct seq_file *seq, void *offset) kfree(buff); out: - if (primary_if) - hardif_free_ref(primary_if); return ret; } @@ -810,20 +803,15 @@ out: /* only send one vis packet. called from send_vis_packets() */ static void send_vis_packet(struct bat_priv *bat_priv, struct vis_info *info) { - struct hard_iface *primary_if; struct vis_packet *packet; - primary_if = primary_if_get_selected(bat_priv); - if (!primary_if) - goto out; - packet = (struct vis_packet *)info->skb_packet->data; if (packet->ttl < 2) { pr_debug("Error - can't send vis packet: ttl exceeded\n"); - goto out; + return; } - memcpy(packet->sender_orig, primary_if->net_dev->dev_addr, ETH_ALEN); + memcpy(packet->sender_orig, bat_priv->own_orig, ETH_ALEN); packet->ttl--; if (is_broadcast_ether_addr(packet->target_orig)) @@ -831,10 +819,6 @@ static void send_vis_packet(struct bat_priv *bat_priv, struct vis_info *info) else unicast_vis_packet(bat_priv, info); packet->ttl++; /* restore TTL */ - -out: - if (primary_if) - hardif_free_ref(primary_if); } /* called from timer; send (and maybe generate) vis packet. */