From patchwork Wed Jan 21 07:34:07 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Timo Teras X-Patchwork-Id: 19594 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.176.167]) by ozlabs.org (Postfix) with ESMTP id 25061DDED7 for ; Wed, 21 Jan 2009 18:34:19 +1100 (EST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755444AbZAUHeP (ORCPT ); Wed, 21 Jan 2009 02:34:15 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755374AbZAUHeO (ORCPT ); Wed, 21 Jan 2009 02:34:14 -0500 Received: from mail-ew0-f20.google.com ([209.85.219.20]:34948 "EHLO mail-ew0-f20.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755373AbZAUHeN (ORCPT ); Wed, 21 Jan 2009 02:34:13 -0500 Received: by ewy13 with SMTP id 13so1333804ewy.13 for ; Tue, 20 Jan 2009 23:34:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:sender:from:to:cc:subject :date:message-id:x-mailer; bh=9vtDEoq5COHrTkjZEwDUPcHCaYr+chkvLmySDE1p/BM=; b=g9sCKoETkyqcyhJkUawDGN+j2AMMDPmvjXTrD0CqAYvrg7m6MBO6d7pizCfOc5aDX3 BOAbMQ1+4+EVnhlm6zQOxhb2mBoaeVQnIHHLdjiipuzGtO5b8BVay1bjqM+c0NtIDfha j9gNCHW+HGGYJFaTKRa1XidLQ+HlMVZkteTlM= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=sender:from:to:cc:subject:date:message-id:x-mailer; b=ckUl9wc9UaARG3TOTAWkhgcK0+XfI78FS4FKqzjoiC3oIMYoZvp7OGZoEHqwkbwjSe JGEKS7d6TCh/0mNkFiVFfQL6wPkkTMgBzM1iPGwI7vXTLavN6CFR9FRRBBu95SflIMu/ ogpcNogEtPo4hv6JjkfdPPlXtyDhDbw6rgdKY= Received: by 10.210.34.5 with SMTP id h5mr81909ebh.161.1232523251877; Tue, 20 Jan 2009 23:34:11 -0800 (PST) Received: from localhost.localdomain (xdsl-83-150-94-239.nebulazone.fi [83.150.94.239]) by mx.google.com with ESMTPS id f7sm13122889nfh.38.2009.01.20.23.34.10 (version=SSLv3 cipher=RC4-MD5); Tue, 20 Jan 2009 23:34:11 -0800 (PST) From: Timo Teras To: netdev@vger.kernel.org Cc: Timo Teras Subject: [PATCH] af_key: parse and send SADB_X_EXT_NAT_T_OA extension Date: Wed, 21 Jan 2009 09:34:07 +0200 Message-Id: <1232523247-6893-1-git-send-email-timo.teras@iki.fi> X-Mailer: git-send-email 1.5.6.3 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org Parse and send SADB_X_EXT_NAT_T_OA along with other NAT-T extensions. Signed-off-by: Timo Teras --- net/key/af_key.c | 20 ++++++++++++++++++++ 1 files changed, 20 insertions(+), 0 deletions(-) diff --git a/net/key/af_key.c b/net/key/af_key.c index f8bd8df..f3e9998 100644 --- a/net/key/af_key.c +++ b/net/key/af_key.c @@ -824,6 +824,7 @@ static struct sk_buff *__pfkey_xfrm_state2msg(struct xfrm_state *x, size += sizeof(struct sadb_x_nat_t_type); size += sizeof(struct sadb_x_nat_t_port); size += sizeof(struct sadb_x_nat_t_port); + size += sizeof(struct sadb_address) + sockaddr_size; } skb = alloc_skb(size + 16, GFP_ATOMIC); @@ -1031,6 +1032,20 @@ static struct sk_buff *__pfkey_xfrm_state2msg(struct xfrm_state *x, n_port->sadb_x_nat_t_port_exttype = SADB_X_EXT_NAT_T_DPORT; n_port->sadb_x_nat_t_port_port = natt->encap_dport; n_port->sadb_x_nat_t_port_reserved = 0; + + /* original address */ + addr = (struct sadb_address*) skb_put(skb, + sizeof(struct sadb_address)+sockaddr_size); + addr->sadb_address_len = + (sizeof(struct sadb_address)+sockaddr_size)/ + sizeof(uint64_t); + addr->sadb_address_exttype = SADB_X_EXT_NAT_T_OA; + addr->sadb_address_proto = 0; + addr->sadb_address_reserved = 0; + addr->sadb_address_prefixlen = + pfkey_sockaddr_fill(&natt->encap_oa, 0, + (struct sockaddr *) (addr + 1), + x->props.family); } /* security context */ @@ -1285,6 +1300,11 @@ static struct xfrm_state * pfkey_msg2xfrm_state(struct net *net, ext_hdrs[SADB_X_EXT_NAT_T_DPORT-1]; natt->encap_dport = n_port->sadb_x_nat_t_port_port; } + if (ext_hdrs[SADB_X_EXT_NAT_T_OA-1]) { + struct sadb_address* n_oa = + ext_hdrs[SADB_X_EXT_NAT_T_OA-1]; + pfkey_sadb_addr2xfrm_addr(n_oa, &natt->encap_oa); + } } err = xfrm_init_state(x);