Age | Commit message (Collapse) | Author |
|
Seems that write() is blocked forever when a connection is not cleanly
closed.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Peers send and receive messages via channels, which could lead to a
deadlock. With this patch, multiple goroutines are used for network
I/Os per peer but one goroutine handle all ribs (including the global
rib). So there is no messages via channels between peers.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Fix a received data corruption bug when a partial read happens. Let's
use io.ReadFull() rather than the homemade one.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
FSMHandler's holdTimer could be accessed by rx goroutine before it's
initialized. Let's use channel rather than sharing time.Timer pointer.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
/home/vagrant% gobgp -u 192.168.10.4 neighbor 192.168.10.2
BGP neighbor is 192.168.10.2, remote AS 65001
BGP version 4, remote router ID 192.168.10.2
BGP state = BGP_FSM_ESTABLISHED, up for 00:12:57
BGP OutQ = 0, Flops = 0
Neighbor capabilities:
MULTIPROTOCOL(IP,UNICAST): advertised
MULTIPROTOCOL(L2VPN,EVPN): advertised
MULTIPROTOCOL(IP,ENCAP): advertised
MULTIPROTOCOL(IP,ROUTE_TARGET_CONSTRTAINS): received
ROUTE_REFRESH: advertised
FOUR_OCTET_AS_NUMBER: advertised and received
Message statistics:
Sent Rcvd
Opens: 1 1
Notifications: 0 0
Updates: 0 0
Keepalives: 26 26
Route Refesh: 0 0
Discarded: 0 0
Total: 27 27
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
|
|
If a negotiated hold time is smaller than a configured hold time, we use
one third of the negotiated hold time for a keepalive interval.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
md5 auth is not supported yet for active conntion
Signed-off-by: ISHIDA Wataru <ishida.wataru@lab.ntt.co.jp>
|
|
When a peer closed a connection (e.g. after we send a notification),
rx goroutine finds it immediately since read() returns an error and
kills tomb. The problem is that tx goroutine doesn't check if tomb
Dying() so tx doesn't die until tx tries to write keepalive to the
socket (and it doesn't never happen if keepalive interval is zero). So
fsm does't become idle shortly.
This fixes tx to check Dying() and makes sure that it sends
notification messages befor dying if they exists.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
You can configure like the following:
[Global]
As = 65032
RouterId = "192.168.255.1"
[[NeighborList]]
NeighborAddress = "10.0.255.1"
PeerAs = 65001
[NeighborList.RouteServer]
RouteServerClient = true
[[NeighborList.AfiSafiList]]
AfiSafiName = "ipv4-unicast"
[[NeighborList.AfiSafiList]]
AfiSafiName = "ipv6-unicast"
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
The modified openconfig yang files are available at:
https://github.com/osrg/yang/tree/gobgp
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
This is part of work to remove time.Time in bgp_config.go since no
nice way to represent time.Time with yang. We replace time.Time with
int64.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
When a peer is deleted, passiveConnCh is closed implicitly.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
|
|
if the length is over 4096, the message will be dropped.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
|
|
fujita@ubuntu:~/git/gobgp$ ./cli/gobgpcli show neighbor 10.0.255.7
BGP neighbor is 10.0.255.7, remote AS 65070
BGP version 4, remote router ID 192.168.0.7
BGP state = BGP_FSM_ACTIVE, up for 0:00:01.982115
BGP OutQ = 0, Flops = 4
Neighbor capabilities:
MULTIPROTOCOL: advertised and received
ROUTE_REFRESH: advertised
FOUR_OCTET_AS_NUMBER: advertised and received
Message statistics:
Sent Rcvd
Opens: 4 4
Notifications: 4 0
Updates: 8 0
Keepalives: 4 4
Route Refesh: 0 0
Discarded: 0 4
Total: 20 12
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
- BGP version (must be 4)
- AS number
- holdtime (0 or 3 <= or <= 65535)
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
at Established state
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
When acceptedConnCh is full, the server goroutine will be
blocked. It's not good even eventually the goroutine will run. This
situation happens only with buggy bgp speaerk peers. But let's avoid
this anyway.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
When a config is deleted, goroutine for FSMHandler.h.Dying becomes
active. sendMessageloop must send notifcation before dying. So it
should not check Dying(). After sending notificaiton, it closes the
conneciton and return. It makes sure that rx goroutine will die too.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
After resetting a peer, the peer will remain idle for idlehold time
(by default 30 seconds). It can be configured via
IdleHoldTImeAfterReset.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
This patch solves the problem that old messages in outgoing will be
sent in a new established session.
Peer goroutine puts some messagages in the outgoing channel. Then the
state changes from established. In such case, once the state becomes
established, the "stale" messages in the outgoing channel will be sent.
With this patch, new outgoing and incoming channels are created at
every state change. No more "stale" messages in the channles.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
send notification.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
We could get errors from Read().
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Handle not only parsing error.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Use Fields.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
We need the order of events on two channles so this patch merges two
channels. For example, we need to get received OpenMessage before
moving to establish state.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
- use peer.incoming channel directly.
- remove state checking for outgoing messages since peer.go does.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
No good reason to keep peerInfo in fsm.go
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
RouteFamily is defined in two files.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Then we can use stringer nicely. Now FSMstate shows nicely like:
DEBU[0081] Peer (10.0.0.1) state changed from BGP_FSM_ACTIVE to BGP_FSM_OPENSENT
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
During development, it's easy to parse a plain format by human.
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|
|
Signed-off-by: FUJITA Tomonori <fujita.tomonori@lab.ntt.co.jp>
|