projects
/
l2tpns.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
1032adb
)
Advertise IPv6 capability to peers.
author
Benjamin Cama
<benoar@dolka.fr>
Tue, 19 Jul 2011 22:22:18 +0000
(
00:22
+0200)
committer
Benjamin Cama
<benoar@dolka.fr>
Thu, 28 Jul 2011 12:58:30 +0000
(14:58 +0200)
Also rename a param define, and fix a forgotten ntohs().
Signed-off-by: Benjamin Cama <benoar@dolka.fr>
bgp.c
patch
|
blob
|
history
bgp.h
patch
|
blob
|
history
diff --git
a/bgp.c
b/bgp.c
index
2309a9c
..
2deeeb3
100644
(file)
--- a/
bgp.c
+++ b/
bgp.c
@@
-996,7
+996,7
@@
static int bgp_handle_input(struct bgp_peer *peer)
}
/* we know only one parameter type */
}
/* we know only one parameter type */
- if (param->type != BGP_
CAPABILITY_PARAM_TYPE
)
+ if (param->type != BGP_
PARAM_TYPE_CAPABILITY
)
{
LOG(1, 0, 0, "Unsupported Optional Parameter type %d from BGP peer %s\n",
param->type, peer->name);
{
LOG(1, 0, 0, "Unsupported Optional Parameter type %d from BGP peer %s\n",
param->type, peer->name);
@@
-1044,7
+1044,7
@@
static int bgp_handle_input(struct bgp_peer *peer)
mp_cap = (struct bgp_mp_cap_param *)&capability->value;
/* the only <AFI, SAFI> tuple we support */
mp_cap = (struct bgp_mp_cap_param *)&capability->value;
/* the only <AFI, SAFI> tuple we support */
- if (
mp_cap->afi
!= AF_INET6 && mp_cap->safi != BGP_MP_SAFI_UNICAST)
+ if (
ntohs(mp_cap->afi)
!= AF_INET6 && mp_cap->safi != BGP_MP_SAFI_UNICAST)
{
LOG(4, 0, 0, "Unsupported multiprotocol AFI %d and SAFI %d from BGP peer %s\n",
mp_cap->afi, mp_cap->safi, peer->name);
{
LOG(4, 0, 0, "Unsupported multiprotocol AFI %d and SAFI %d from BGP peer %s\n",
mp_cap->afi, mp_cap->safi, peer->name);
@@
-1123,6
+1123,9
@@
static int bgp_handle_input(struct bgp_peer *peer)
static int bgp_send_open(struct bgp_peer *peer)
{
struct bgp_data_open data;
static int bgp_send_open(struct bgp_peer *peer)
{
struct bgp_data_open data;
+ struct bgp_mp_cap_param mp_ipv6 = { htons(AF_INET6), 0, BGP_MP_SAFI_UNICAST };
+ struct bgp_capability cap_mp_ipv6;
+ struct bgp_opt_param param_cap_mp_ipv6;
uint16_t len = sizeof(peer->outbuf->packet.header);
memset(peer->outbuf->packet.header.marker, 0xff,
uint16_t len = sizeof(peer->outbuf->packet.header);
memset(peer->outbuf->packet.header.marker, 0xff,
@@
-1134,7
+1137,18
@@
static int bgp_send_open(struct bgp_peer *peer)
data.as = htons(our_as);
data.hold_time = htons(peer->hold);
data.identifier = my_address;
data.as = htons(our_as);
data.hold_time = htons(peer->hold);
data.identifier = my_address;
- data.opt_len = 0;
+
+ /* construct the param and capability */
+ cap_mp_ipv6.code = BGP_CAP_CODE_MP;
+ cap_mp_ipv6.len = sizeof(mp_ipv6);
+ memcpy(&cap_mp_ipv6.value, &mp_ipv6, cap_mp_ipv6.len);
+
+ param_cap_mp_ipv6.type = BGP_PARAM_TYPE_CAPABILITY;
+ param_cap_mp_ipv6.len = 2 + sizeof(mp_ipv6);
+ memcpy(¶m_cap_mp_ipv6.value, &cap_mp_ipv6, param_cap_mp_ipv6.len);
+
+ data.opt_len = 2 + param_cap_mp_ipv6.len;
+ memcpy(&data.opt_params, ¶m_cap_mp_ipv6, data.opt_len);
memcpy(peer->outbuf->packet.data, &data, BGP_DATA_OPEN_SIZE);
len += BGP_DATA_OPEN_SIZE;
memcpy(peer->outbuf->packet.data, &data, BGP_DATA_OPEN_SIZE);
len += BGP_DATA_OPEN_SIZE;
diff --git
a/bgp.h
b/bgp.h
index
79906e2
..
91adb88
100644
(file)
--- a/
bgp.h
+++ b/
bgp.h
@@
-50,7
+50,7
@@
struct bgp_opt_param {
char value[BGP_MAX_OPT_PARAM_SIZE];
} __attribute__ ((packed));
char value[BGP_MAX_OPT_PARAM_SIZE];
} __attribute__ ((packed));
-#define BGP_
CAPABILITY_PARAM_TYPE
2
+#define BGP_
PARAM_TYPE_CAPABILITY
2
struct bgp_capability {
uint8_t code;
uint8_t len;
struct bgp_capability {
uint8_t code;
uint8_t len;