RFC6126bis introduces a flags field for the Hello TLV, and adds a unicast flag that is used to signify that a hello was sent as unicast. This adds parsing of the flags field and ignores such unicast hellos, which preserves compatibility until we can add a proper implementation of the unicast hello mechanism.
Signed-off-by: Toke Høiland-Jørgensen <[email protected]> --- proto/babel/packets.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/proto/babel/packets.c b/proto/babel/packets.c index efe05678..597ed60d 100644 --- a/proto/babel/packets.c +++ b/proto/babel/packets.c @@ -40,7 +40,7 @@ struct babel_tlv_ack { struct babel_tlv_hello { u8 type; u8 length; - u16 reserved; + u16 flags; u16 seqno; u16 interval; } PACKED; @@ -104,8 +104,9 @@ struct babel_tlv_seqno_request { } PACKED; -#define BABEL_FLAG_DEF_PREFIX 0x80 -#define BABEL_FLAG_ROUTER_ID 0x40 +#define BABEL_FLAG_DEF_PREFIX 0x80 +#define BABEL_FLAG_ROUTER_ID 0x40 +#define BABEL_FLAG_UNICAST_HELLO 0x8000 struct babel_parse_state { @@ -340,6 +341,12 @@ babel_read_hello(struct babel_tlv *hdr, union babel_msg *m, { struct babel_tlv_hello *tlv = (void *) hdr; struct babel_msg_hello *msg = &m->hello; + u16 flags; + + /* We currently don't support unicast Hello */ + flags = get_u16(&tlv->flags); + if (flags & BABEL_FLAG_UNICAST_HELLO) + return PARSE_IGNORE; msg->type = BABEL_TLV_HELLO; msg->seqno = get_u16(&tlv->seqno); -- 2.14.2
