OpenBSD CVS

CVS log for src/usr.sbin/ldpd/ldp.h


[BACK] Up to [local] / src / usr.sbin / ldpd

Request diff between arbitrary revisions


Default branch: MAIN


Revision 1.42 / (download) - annotate - [select for diffs], Sat Mar 4 00:21:48 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
CVS Tags: OPENBSD_7_5_BASE, OPENBSD_7_5, OPENBSD_7_4_BASE, OPENBSD_7_4, OPENBSD_7_3_BASE, OPENBSD_7_3, OPENBSD_7_2_BASE, OPENBSD_7_2, OPENBSD_7_1_BASE, OPENBSD_7_1, OPENBSD_7_0_BASE, OPENBSD_7_0, OPENBSD_6_9_BASE, OPENBSD_6_9, OPENBSD_6_8_BASE, OPENBSD_6_8, OPENBSD_6_7_BASE, OPENBSD_6_7, OPENBSD_6_6_BASE, OPENBSD_6_6, OPENBSD_6_5_BASE, OPENBSD_6_5, OPENBSD_6_4_BASE, OPENBSD_6_4, OPENBSD_6_3_BASE, OPENBSD_6_3, OPENBSD_6_2_BASE, OPENBSD_6_2, OPENBSD_6_1_BASE, OPENBSD_6_1, HEAD
Changes since 1.41: +2 -1 lines
Diff to previous 1.41 (colored)

Send VPLS MAC withdrawals.

RFC 4762 says that MAC address withdrawal messages can be used to
improve convergence time in VPLS networks. This patch makes ldpd send
MAC withdrawals whenever a non-pseudowire interface pertaining to a
VPLS goes down. The processing of received MAC withdrawals will be
implemented later.

Revision 1.41 / (download) - annotate - [select for diffs], Sat Mar 4 00:15:35 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.40: +9 -1 lines
Diff to previous 1.40 (colored)

Implement RFC 5919 (LDP End-of-LIB).

Revision 1.40 / (download) - annotate - [select for diffs], Sat Mar 4 00:12:26 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.39: +4 -1 lines
Diff to previous 1.39 (colored)

Implement RFC 6667 (Typed Wildcard FEC for PWid).

Revision 1.39 / (download) - annotate - [select for diffs], Sat Mar 4 00:09:17 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.38: +9 -1 lines
Diff to previous 1.38 (colored)

Implement RFC 5918 (Typed Wildcard FEC).

Revision 1.38 / (download) - annotate - [select for diffs], Sat Mar 4 00:06:10 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.37: +19 -1 lines
Diff to previous 1.37 (colored)

Implement RFC 5561 (LDP Capabilities).

This patch per-se doesn't introduce any useful functionality, but prepares
the ground for new enhancements to ldpd (i.e. implementation of new RFCs
that make use of LDP capabilities).

Revision 1.37 / (download) - annotate - [select for diffs], Fri Mar 3 23:56:54 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.36: +2 -2 lines
Diff to previous 1.36 (colored)

The PW Status is an unknown TLV.

Without this fix, any LDP speaker that doesn't implement RFC 4447 will
shut down the session upon receipt of a PWid Label Mapping (unless the
use of the PW-Status TLV is disabled via configuration).

Revision 1.36 / (download) - annotate - [select for diffs], Fri Mar 3 23:41:27 2017 UTC (7 years, 3 months ago) by renato
Branch: MAIN
Changes since 1.35: +2 -1 lines
Diff to previous 1.35 (colored)

Minor tweaks.

Revision 1.35 / (download) - annotate - [select for diffs], Sat Sep 3 16:07:08 2016 UTC (7 years, 8 months ago) by renato
Branch: MAIN
Changes since 1.34: +3 -1 lines
Diff to previous 1.34 (colored)

Rework the sending of address messages.

* Respect the session's negotiated maximum pdu length and split the
  sending of our local addresses into multiple messages if necessary;

* Log sent/received addresses;

* Add new wrappers to send only one address (send_address_single)
  and to send all addresses of the given address-family
  (send_address_all). These wrappers create a temporary list of addresses
  to be sent, and send_address() then acts on this last.

Revision 1.34 / (download) - annotate - [select for diffs], Fri Jul 15 17:09:25 2016 UTC (7 years, 10 months ago) by renato
Branch: MAIN
CVS Tags: OPENBSD_6_0_BASE, OPENBSD_6_0
Changes since 1.33: +2 -2 lines
Diff to previous 1.33 (colored)

Improve logging of reserved labels.

Print "exp-null" and "imp-null" instead of "0" and "3", for example. Also,
remove print_label() and print_pw_type() from ldpctl.c and use the
equivalent functions from ldpd's log.c.

While here, be more paranoid and use UINT32_MAX instead of UINT_MAX
for NO_LABEL.

Revision 1.33 / (download) - annotate - [select for diffs], Fri Jul 1 23:36:38 2016 UTC (7 years, 11 months ago) by renato
Branch: MAIN
Changes since 1.32: +13 -13 lines
Diff to previous 1.32 (colored)

More renaming and whitespace cleanup.

No binary change after "strip -s".

Revision 1.32 / (download) - annotate - [select for diffs], Fri Jul 1 23:22:42 2016 UTC (7 years, 11 months ago) by renato
Branch: MAIN
Changes since 1.31: +2 -1 lines
Diff to previous 1.31 (colored)

Decrease the initialization FSM timeout.

The previous value of 180 was just too long. If a neighbor get stuck in
the initialization FSM for more than 15 seconds, then there's certainly
something wrong and the session should be dropped.

A potential case of a neighbor getting stuck in the initialization
FSM is when both the local and the remote LSRs disable the LDPv4 GTSM
negotiation and there's a mismatch in their GTSM configuration (one is
enabled for GTSM while the other is not).

In this case, a smaller timeout allows for a quicker recovery of the
session when the configuration is fixed on either side.

Revision 1.31 / (download) - annotate - [select for diffs], Fri Jul 1 23:18:24 2016 UTC (7 years, 11 months ago) by renato
Branch: MAIN
Changes since 1.30: +4 -4 lines
Diff to previous 1.30 (colored)

Rename hello flags to keep consistent with the rest of the code.

Flag constants should start with F_.

Revision 1.30 / (download) - annotate - [select for diffs], Fri Jul 1 23:14:31 2016 UTC (7 years, 11 months ago) by renato
Branch: MAIN
Changes since 1.29: +2 -1 lines
Diff to previous 1.29 (colored)

Add GTSM support (RFC 6720).

This also finishes the missing bits from our RFC 7552 implementation
because GTSM is mandatory for LDPv6.

To avoid any kind of interoperability problems, I included a few
knobs to enable/disable GTSM on a per-address-family and per-neighbor
basis. Cisco's LDPv6 implementation, for instance, doesn't support GTSM.

"reads good" claudio@

Revision 1.29 / (download) - annotate - [select for diffs], Mon May 23 19:14:03 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.28: +2 -1 lines
Diff to previous 1.28 (colored)

Update copyright information.

Revision 1.28 / (download) - annotate - [select for diffs], Mon May 23 19:11:42 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.27: +2 -2 lines
Diff to previous 1.27 (colored)

Remove superfluous includes.

Revision 1.27 / (download) - annotate - [select for diffs], Mon May 23 18:58:48 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.26: +22 -3 lines
Diff to previous 1.26 (colored)

Add support for IPv6 (RFC 7552).

This includes:
* Full compliance to RFC 7552;
* Support for MD5 on LDPov6 sessions;
* Support for pseudowires over IPv6 LSPs (we're probably the world's
  first implementation doing this);
* Support for the IPv6 explicit-null label;
* Knob to specify the prefered address-family for TCP transport
  connections;
* Knob to use cisco non-compliant format to send and interpret the
  Dual-Stack capability TLV.

Revision 1.26 / (download) - annotate - [select for diffs], Mon May 23 17:43:42 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.25: +45 -45 lines
Diff to previous 1.25 (colored)

Fix mess caused by my commit script.

I screwed up everything... trying to fix now.

Revision 1.25 / (download) - annotate - [select for diffs], Mon May 23 16:33:32 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.24: +2 -1 lines
Diff to previous 1.24 (colored)

Minor adjustments in l2vpn code.

* Define a new constant for the default pseudowire type;
* On l2vpn_new(), initialize the l2vpn lists with LIST_NEW (cosmetic
  because the struct was calloc'ed);
* Add a const qualifier to the second parameter of l2vpn_find();
* Remove l2vpn_if_del() and use just free() instead.

Revision 1.24 / (download) - annotate - [select for diffs], Mon May 23 16:12:28 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.23: +6 -5 lines
Diff to previous 1.23 (colored)

Rename a few constants to avoid confusion.

In ldpd we have the map structure, which is used to represent a label message,
and the fec structure, used to store FECs in the LIB.

As of now, ldpd supports two type of FECs:
* IPv4 prefix (FEC_TYPE_IPV4);
* PWID (FEC_TYPE_PWID).

For the label messages, the following contants were being used:
* FEC_WILDCARD;
* FEC_PREFIX (IPv4 or IPv6);
* FEC_PWID.

Since these contants have similar names to the previous ones, rename
them to:
* MAP_TYPE_WILDCARD;
* MAP_TYPE_PREFIX;
* MAP_TYPE_PWID.

Revision 1.23 / (download) - annotate - [select for diffs], Mon May 23 16:10:23 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.22: +1 -2 lines
Diff to previous 1.22 (colored)

Remove unused code.

Revision 1.22 / (download) - annotate - [select for diffs], Mon May 23 16:04:04 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.21: +7 -4 lines
Diff to previous 1.21 (colored)

Improve the parser of TCP/session packets.

Add more safeguards against malformed packets and fix existing ones. Also,
rename a few variables and constants to match their real meaning. For
example, rename gen_msg_tlv() to gen_msg_hdr() because this function
generates an LDP header, not a TLV.

Finally, clean-up all the send_* functions so they all follow the same
pattern.

Revision 1.21 / (download) - annotate - [select for diffs], Mon May 23 15:53:40 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.20: +3 -3 lines
Diff to previous 1.20 (colored)

Validate received hello holdtime and keepalive time.

Refuse a keepalive time of zero because it's invalid. For the hello
holdtime, zero is valid and means infinite.

Additionally, refuse values smaller than three for both the keepalive
timer and the hello holdtime. The keepalive/hello interval is calculated
as one third of their holdtime, which means that if the holdtime is one
or two, the calculated interval would be zero using integer arithmetic.

If anyone wants to use such a small holdtime, he or she should use
BFD instead.

Revision 1.20 / (download) - annotate - [select for diffs], Mon May 23 15:47:24 2016 UTC (8 years ago) by renato
Branch: MAIN
Changes since 1.19: +4 -4 lines
Diff to previous 1.19 (colored)

Move some code around.

This patch doesn't introduce any logical change.

Revision 1.19 / (download) - annotate - [select for diffs], Tue Jul 21 04:52:29 2015 UTC (8 years, 10 months ago) by renato
Branch: MAIN
CVS Tags: OPENBSD_5_9_BASE, OPENBSD_5_9, OPENBSD_5_8_BASE, OPENBSD_5_8
Changes since 1.18: +59 -5 lines
Diff to previous 1.18 (colored)

VPLS signaling support.

This patch introduces full support for pseudowire signaling in ldpd(8),
including Control Word and Status TLV negotiation.

As of now it's not possible to configure a VPWS, but the signaling is
the same. In the future, when VPWS support is available in the kernel,
ldpd(8) can be extended to support VPWS with only a few modifications.

Limitations:
* No support for FEC 129, only FEC 128 (more widely deployed);
* No support for group withdraws (not widely deployed);
* No support for MAC withdraws (not widely deployed).

Related RFCs:
* RFC 3916: Requirements for Pseudo-Wire Emulation Edge-to-Edge (PWE3)
* RFC 3985: Pseudo Wire Emulation Edge-to-Edge (PWE3) Architecture
* RFC 4385: Pseudowire Emulation Edge-to-Edge (PWE3) Control Word for
  Use over an MPLS PSN
* RFC 4446: IANA Allocations for Pseudowire Edge to Edge Emulation (PWE3)
* RFC 4447: Pseudowire Setup and Maintenance Using the Label Distribution
  Protocol (LDP)
* RFC 4448: Encapsulation Methods for Transport of Ethernet over MPLS
  Networks
* RFC 4905: Encapsulation Methods for Transport of Layer 2 Frames over
  MPLS Networks
* RFC 4906: Transport of Layer 2 Frames Over MPLS

ok claudio@

Revision 1.18 / (download) - annotate - [select for diffs], Sun Jul 19 20:54:17 2015 UTC (8 years, 10 months ago) by renato
Branch: MAIN
Changes since 1.17: +3 -2 lines
Diff to previous 1.17 (colored)

Rework label mapping algorithms to be more in line with the RFC.

This patch presents a thoroughly review of the label mapping
algorithms. Most of the changes are minor bug fixes in the handling of
received label messages.

Additional improvements:
* Add a few more references to the Appendix A of the RFC5036 ("LDP
  Label Distribution Procedures") into the code;
* Add full multipath support;
* Send label withdraws when appropriate;
* Add label withdraw/release wildcard support.

NOTE: As a result of implementing only the "Liberal Label Retention" and
"Downstream Unsolicited" modes, we will never send a label request
("Request  Never"). And that means that we can ignore the following
notification messages: "Label Request Aborted", "No Label Resources",
"No Route" and "Label Resources Available". The following algorithms
mentioned in the RFC can also be ignored: "Timeout of Deferred Label
Request", "Detect Local Label Resources Have Become Available" and
"Receive Label Abort Request".

Now, considering that we only support one combination of all modes of
operation, we can say that we have an almost complete implementation of
the protocol.

ok claudio@

Revision 1.17 / (download) - annotate - [select for diffs], Sat Mar 21 18:34:01 2015 UTC (9 years, 2 months ago) by renato
Branch: MAIN
Changes since 1.16: +1 -7 lines
Diff to previous 1.16 (colored)

Remove unused variables and functions.

Revision 1.16 / (download) - annotate - [select for diffs], Thu Oct 17 17:52:21 2013 UTC (10 years, 7 months ago) by renato
Branch: MAIN
CVS Tags: OPENBSD_5_7_BASE, OPENBSD_5_7, OPENBSD_5_6_BASE, OPENBSD_5_6, OPENBSD_5_5_BASE, OPENBSD_5_5
Changes since 1.15: +1 -3 lines
Diff to previous 1.15 (colored)

Respect the max pdu length and merge all send_label* functions into
a single generic function.

Revision 1.15 / (download) - annotate - [select for diffs], Tue Oct 15 19:59:53 2013 UTC (10 years, 7 months ago) by renato
Branch: MAIN
Changes since 1.14: +2 -1 lines
Diff to previous 1.14 (colored)

Improve parsing of LDP messages.
Add more sanity checks and send proper notification messages on error
conditions.
OK claudio@

Revision 1.14 / (download) - annotate - [select for diffs], Tue Oct 15 16:47:24 2013 UTC (10 years, 7 months ago) by renato
Branch: MAIN
Changes since 1.13: +1 -2 lines
Diff to previous 1.13 (colored)

Ignore messages that have Unknown flag set.
OK claudio@

Revision 1.13 / (download) - annotate - [select for diffs], Tue Jun 4 02:25:28 2013 UTC (11 years ago) by claudio
Branch: MAIN
CVS Tags: OPENBSD_5_4_BASE, OPENBSD_5_4
Changes since 1.12: +2 -5 lines
Diff to previous 1.12 (colored)

Implement support for adjacencies and targeted hellos
Refactor adjacencies out of the neighbor handling so that it is possible to
have more complex topologies with targeted sessions.
From Renato Westphal

Revision 1.12 / (download) - annotate - [select for diffs], Tue Jun 4 01:32:16 2013 UTC (11 years ago) by claudio
Branch: MAIN
Changes since 1.11: +2 -1 lines
Diff to previous 1.11 (colored)

Properly implement the exponential backoff timer on session initialization

According with the section 2.5.3 of RFC 5036, an LSR must throttle its
session setup retry attempts with an exponential backoff in situations
where Initialization messages are being NAK'd (because of disagreements
on session parameters). It doesn't mention using this procedure for TCP
connection failures. With that said, start the inactive delay timer only
after receiving an appropriate notification message.

When playing the active role of the initialization process, throttle the
session setup retry attempts by not connecting to the remote peer. When
playing the passive role, throttle the session setup retry attempts by
delaying the processing of the received Initialization message.

Diff by Renato Westphal, adjusted by myself

Revision 1.11 / (download) - annotate - [select for diffs], Sat Jun 1 01:34:57 2013 UTC (11 years ago) by claudio
Branch: MAIN
Changes since 1.10: +7 -1 lines
Diff to previous 1.10 (colored)

Always advertise the Router-ID as the transport address.
RFC 5036 - Section 2.5.2 says:
    An LSR MUST advertise the same transport address in all
    Hellos that advertise the same label space...
To satisfy this condition, always advertise the Router-ID as the
transport address by using the "IPv4 Transport Address" TLV in the
generated Hello messages.
From Renato Westphal

Revision 1.10 / (download) - annotate - [select for diffs], Thu May 30 16:14:50 2013 UTC (11 years ago) by claudio
Branch: MAIN
Changes since 1.9: +2 -3 lines
Diff to previous 1.9 (colored)

Simplify hello holdtime calculation and stop the timeout timer if the
holdtime is "infinite".
Diff from Renato Westphal [renatowestphal at gmail.com]

Revision 1.9 / (download) - annotate - [select for diffs], Mon Jan 10 11:58:39 2011 UTC (13 years, 4 months ago) by claudio
Branch: MAIN
CVS Tags: OPENBSD_5_3_BASE, OPENBSD_5_3, OPENBSD_5_2_BASE, OPENBSD_5_2, OPENBSD_5_1_BASE, OPENBSD_5_1, OPENBSD_5_0_BASE, OPENBSD_5_0, OPENBSD_4_9_BASE, OPENBSD_4_9
Changes since 1.8: +1 -7 lines
Diff to previous 1.8 (colored)

Better optional parameter parsing. Ignore unknown TLVs that have
the U flag set. Kill struct hello_opt_parms_tlv since it is now
unused.

Revision 1.8 / (download) - annotate - [select for diffs], Mon Jan 10 11:52:04 2011 UTC (13 years, 4 months ago) by claudio
Branch: MAIN
Changes since 1.7: +7 -10 lines
Diff to previous 1.7 (colored)

Rename struct fec_tlv to struct tlv since it is just the generic
TLV header which will be used in different places shortly.
Cleanup the ldp.h header file a tiny bit.

Revision 1.7 / (download) - annotate - [select for diffs], Thu Nov 4 09:52:16 2010 UTC (13 years, 7 months ago) by claudio
Branch: MAIN
Changes since 1.6: +8 -6 lines
Diff to previous 1.6 (colored)

Rewrite all packet parsers to be more careful about alignment. Until
now ldpd had no chance to run on a strict alignment architecture but
this makes ldpd happy on sparc64. Be careful to do all needed overflow
checks and try to make all parsing functions look similar.
OK michele@

Revision 1.6 / (download) - annotate - [select for diffs], Tue Oct 26 12:59:03 2010 UTC (13 years, 7 months ago) by claudio
Branch: MAIN
Changes since 1.5: +9 -1 lines
Diff to previous 1.5 (colored)

Implement the optional label request message ID TLV.
Currently on the genaration side is done.

Revision 1.5 / (download) - annotate - [select for diffs], Mon May 17 08:07:04 2010 UTC (14 years ago) by claudio
Branch: MAIN
CVS Tags: OPENBSD_4_8_BASE, OPENBSD_4_8
Changes since 1.4: +1 -2 lines
Diff to previous 1.4 (colored)

The host address encoding of FEC was killed in RFC5036 and we're happy
about that. OK michele@

Revision 1.4 / (download) - annotate - [select for diffs], Thu Apr 15 14:55:12 2010 UTC (14 years, 1 month ago) by claudio
Branch: MAIN
Changes since 1.3: +4 -2 lines
Diff to previous 1.3 (colored)

struct ldp_hdr has probably the worst possible layout (ending with a single
u_int16_t) and must therefor be __packed or sizeof() returns a to large size
and causes some very nasty issues.
"embrace __packed" dlg@ OK michele@
While there add new notification status types defined in RFC5036

Revision 1.3 / (download) - annotate - [select for diffs], Thu Feb 25 17:40:46 2010 UTC (14 years, 3 months ago) by claudio
Branch: MAIN
CVS Tags: OPENBSD_4_7_BASE, OPENBSD_4_7
Changes since 1.2: +2 -5 lines
Diff to previous 1.2 (colored)

Do not use bufferevent for something that's already covered in the imsg
buffer API. This fixes a few possible problems in session_read and does
some further cleanup in various places. Wrap msgbuf into evbuf to add
libevent functionality and use buf_read to handle the read side of a
session.  OK michele@ and dlg@ did not see anything evil

Revision 1.2 / (download) - annotate - [select for diffs], Wed Dec 9 12:19:29 2009 UTC (14 years, 5 months ago) by michele
Branch: MAIN
Changes since 1.1: +10 -3 lines
Diff to previous 1.1 (colored)

Enable parsing of the optional Transport Address TLV in the hello
message.

ok claudio@

Revision 1.1 / (download) - annotate - [select for diffs], Mon Jun 1 20:59:45 2009 UTC (15 years ago) by michele
Branch: MAIN
CVS Tags: OPENBSD_4_6_BASE, OPENBSD_4_6

Welcome ldpd, the Label Distribution Protocol daemon.
Built using the imsg/three process framework, its main aim
is to redistribute MPLS labels between peers.

Right now it has some really basic functionalities,
the basic protocol works and peers are able to exchange
labels and insert them in the kernel.
It still does not react to changes of topology.

Not yet connected to the builds.

ok claudio@ deraadt@

This form allows you to request diff's between any two revisions of a file. You may select a symbolic revision name using the selection box or you may type in a numeric name using the type-in text box.