|
|
Neighbour specific information.
enum State { Down = 1, Attempt = 2, Init = 3, TwoWay = 4, ExStart = 5, Exchange = 6, Loading = 7, Full = 8 } | State |
The ordering is important (used in the DR and BDR election).
typedef XorpCallback0<bool>::RefPtr RxmtCallback | RxmtCallback |
Neighbour (Ospf<A>& ospf, Peer<A>& peer, OspfTypes::RouterID router_id,
A neighbour_address, OspfTypes::NeighbourID neighbourid,
OspfTypes::LinkType linktype,
State state = Init)
| Neighbour |
We start in Init not Down state as typically this class is created on demand when a hello packet arrives.
~Neighbour ()
| ~Neighbour |
OspfTypes::NeighbourID get_neighbour_id ()
| get_neighbour_id |
[const]
Get neighbour ID our internal ID for each neighbour.
OspfTypes::RouterID get_router_id ()
| get_router_id |
[const]
A get_neighbour_address ()
| get_neighbour_address |
[const]
OspfTypes::RouterID get_candidate_id ()
| get_candidate_id |
[const]
Returns: the value that should be used for DR or BDR for this neighbour In OSPFv2 its the source address of the interface. In OSPFv3 its the router ID.
State get_state ()
| get_state |
[const]
Get the state of this neighbour.
Auth& get_auth_handler ()
| get_auth_handler |
Return the authentication handler.
bool is_neighbour_DR ()
| is_neighbour_DR |
[const]
Returns: true if this routers neighbour is the DR.
bool is_neighbour_DR_or_BDR ()
| is_neighbour_DR_or_BDR |
[const]
Returns: true if this routers neighbour is the DR or BDR.
bool announce_in_hello_packet ()
| announce_in_hello_packet |
[const]
Should this neighbour be announced in hello packet.
Returns: true if it should.
HelloPacket * get_hello_packet ()
| get_hello_packet |
Get a copy of the last hello packet that was received.
HelloPacket * get_hello_packet ()
| get_hello_packet |
[const]
Get a copy of the last hello packet that was received.
void event_hello_received (HelloPacket *hello)
| event_hello_received |
void data_description_received (DataDescriptionPacket *dd)
| data_description_received |
void link_state_request_received (LinkStateRequestPacket *lsrp)
| link_state_request_received |
void link_state_update_received (LinkStateUpdatePacket *lsup)
| link_state_update_received |
void link_state_acknowledgement_received (LinkStateAcknowledgementPacket
*lsap)
| link_state_acknowledgement_received |
bool send_lsa (Lsa::LsaRef lsar)
| send_lsa |
Send this LSA directly to the neighbour. Do not place on retransmission list.
Returns: true on success
bool queue_lsa (OspfTypes::PeerID peerid, OspfTypes::NeighbourID nid,
Lsa::LsaRef lsar, bool& multicast_on_peer)
| queue_lsa |
Queue an LSA for transmission.
Parameters:
peer | the LSA arrived on. |
nid | the LSA arrived on. |
lsar | the lsa |
multicast_on_peer | Did this LSA get multicast on this peer. |
Returns: true on success.
bool push_lsas ()
| push_lsas |
bool on_link_state_request_list (Lsa::LsaRef lsar)
| on_link_state_request_list |
[const]
Is this LSA on this neighbours link state request list.
Returns: true if it is.
OspfTypes::LinkType get_linktype ()
| get_linktype |
[const]
Returns: the link type.
bool send_ack (list<Lsa_header>& ack, bool direct, bool& multicast_on_peer)
| send_ack |
Send acknowledgement.
Parameters:
ack | list of acknowledgements. |
direct | if true send directly to the neighbour. |
multicast_on_peer | set to true if the ack was multicast. Only if direct is false is it possible for the packet to be multicast. |
Returns: true if an acknowledgement is sent.
void event_kill_neighbour ()
| event_kill_neighbour |
void event_adj_ok ()
| event_adj_ok |
void event_bad_link_state_request ()
| event_bad_link_state_request |
string pp_state (State is)
| pp_state |
[static]
Pretty print the neighbour state.
bool get_neighbour_info (NeighbourInfo& ninfo)
| get_neighbour_info |
[const]
Get state information about this neighbour.
Parameters:
ninfo | if neighbour is found its information. |
string str ()
| str |
static OspfTypes::NeighbourID _ticket | _ticket |