From patchwork Wed Sep 15 22:30:13 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?R=C3=A9mi_Denis-Courmont?= X-Patchwork-Id: 64919 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 338B9B6EF1 for ; Thu, 16 Sep 2010 08:30:33 +1000 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754303Ab0IOWaS (ORCPT ); Wed, 15 Sep 2010 18:30:18 -0400 Received: from yop.chewa.net ([91.121.105.214]:36522 "EHLO yop.chewa.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753496Ab0IOWaR (ORCPT ); Wed, 15 Sep 2010 18:30:17 -0400 Received: by yop.chewa.net (Postfix, from userid 1007) id DF871139E; Thu, 16 Sep 2010 00:30:15 +0200 (CEST) From: =?utf-8?q?R=C3=A9mi=20Denis-Courmont?= To: netdev@vger.kernel.org Cc: =?UTF-8?q?R=C3=A9mi=20Denis-Courmont?= Subject: [PATCH] Phonet: look up the resource routing table when forwarding Date: Thu, 16 Sep 2010 01:30:13 +0300 Message-Id: <1284589815-28302-3-git-send-email-remi@remlab.net> X-Mailer: git-send-email 1.5.6.5 In-Reply-To: <1284589815-28302-2-git-send-email-remi@remlab.net> References: <1284589815-28302-1-git-send-email-remi@remlab.net> <1284589815-28302-2-git-send-email-remi@remlab.net> MIME-Version: 1.0 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org From: Rémi Denis-Courmont Signed-off-by: Rémi Denis-Courmont --- net/phonet/af_phonet.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-) diff --git a/net/phonet/af_phonet.c b/net/phonet/af_phonet.c index 73aee7f..fd95beb 100644 --- a/net/phonet/af_phonet.c +++ b/net/phonet/af_phonet.c @@ -251,6 +251,16 @@ int pn_skb_send(struct sock *sk, struct sk_buff *skb, else if (phonet_address_lookup(net, daddr) == 0) { dev = phonet_device_get(net); skb->pkt_type = PACKET_LOOPBACK; + } else if (pn_sockaddr_get_object(target) == 0) { + /* Resource routing (small race until phonet_rcv()) */ + struct sock *sk = pn_find_sock_by_res(net, + target->spn_resource); + if (sk) { + sock_put(sk); + dev = phonet_device_get(net); + skb->pkt_type = PACKET_LOOPBACK; + } else + dev = phonet_route_output(net, daddr); } else dev = phonet_route_output(net, daddr); @@ -383,6 +393,13 @@ static int phonet_rcv(struct sk_buff *skb, struct net_device *dev, goto out; } + /* resource routing */ + if (pn_sockaddr_get_object(&sa) == 0) { + struct sock *sk = pn_find_sock_by_res(net, sa.spn_resource); + if (sk) + return sk_receive_skb(sk, skb, 0); + } + /* check if we are the destination */ if (phonet_address_lookup(net, pn_sockaddr_get_addr(&sa)) == 0) { /* Phonet packet input */