|
|
A peer represents a single area and is bound to a PeerOut.
enum InterfaceState { Down, Loopback, Waiting, Point2Point, DR_other, Backup, DR, } | InterfaceState |
Interface as defined by OSPF not XORP.
Peer (Ospf<A>& ospf, PeerOut<A>& peerout, OspfTypes::AreaID area_id,
OspfTypes::AreaType area_type)
| Peer |
~Peer ()
| ~Peer |
bool init ()
| init |
bool shutdown ()
| shutdown |
Will only execute if go() has been called. Can be called multiple times paired with go().
bool go ()
| go |
Called once the peer is configured and enabled. Can be called multiple times paired with shutdown().
bool initV3 ()
| initV3 |
OSPFv3 specific initialisation.
bool goV3 ()
| goV3 |
bool shutdownV3 ()
| shutdownV3 |
void populate_link_lsa ()
| populate_link_lsa |
bool match (IPv6 source)
| match |
[const]
If the source address matches a global address return true.
string get_if_name ()
| get_if_name |
[const]
For debugging only printable rendition of this interface/vif.
OspfTypes::PeerID get_peerid ()
| get_peerid |
[const]
Get Peer ID.
A get_interface_address ()
| get_interface_address |
[const]
Address of this interface/vif.
Returns: interface/vif address.
uint16_t get_interface_prefix_length ()
| get_interface_prefix_length |
[const]
Returns: prefix length of this interface.
A get_p2p_neighbour_address ()
| get_p2p_neighbour_address |
[const]
Address of the p2p neighbour.
Returns: p2p neighbour address.
uint16_t get_interface_mtu ()
| get_interface_mtu |
[const]
Returns: mtu of this interface.
uint16_t get_frame_size ()
| get_frame_size |
[const]
The maximum size of an OSPF frame, the MTU minus the IP header. Also include any bytes that the authentication scheme may use.
Returns: maximum frame size.
uint16_t get_inftransdelay ()
| get_inftransdelay |
[const]
Returns: InfTransDelay
bool transmit (typename Transmit<A>::TransmitRef tr)
| transmit |
Used by external and internal entities to transmit packets.
bool add_neighbour (A neighbour_address, OspfTypes::RouterID rid)
| add_neighbour |
bool remove_neighbour (A neighbour_address, OspfTypes::RouterID rid)
| remove_neighbour |
bool belongs (A addr)
| belongs |
[const]
Address belongs to this router used for destination address validation.
bool receive (A dst, A src, Packet *packet)
| receive |
Packets for this peer are received here.
bool accept_lsa (Lsa::LsaRef lsar)
| accept_lsa |
[const]
Used to test if an lsa should be accepted for this peer/neighbour. Specifically to deal with the case that AS-External-LSAs should not be sent on virtual links.
bool send_lsa (const OspfTypes::NeighbourID nid, Lsa::LsaRef lsar)
| send_lsa |
[const]
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 |
[const]
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 do_dr_or_bdr ()
| do_dr_or_bdr |
[const]
bool is_DR ()
| is_DR |
[const]
Returns: true if this router is the DR.
bool is_BDR ()
| is_BDR |
[const]
Returns: true if this router is the BDR.
bool is_DR_or_BDR ()
| is_DR_or_BDR |
[const]
Returns: true if this router is the DR or BDR.
bool neighbours_exchange_or_loading ()
| neighbours_exchange_or_loading |
[const]
Are any of the neighbours of this peer in the state exchange or loading.
Returns: true if any of the neighbours are in state exchange or loading.
bool neighbour_at_least_two_way (OspfTypes::RouterID rid, bool& twoway)
| neighbour_at_least_two_way |
Get the state of the neighbour with the specified router ID.
Parameters:
rid | Router ID |
twoway | if the neighbour is found true means the neighbour is at least twoway. |
Returns: true if the neighbour is found.
bool get_neighbour_address (OspfTypes::RouterID rid, uint32_t interface_id,
A& neighbour_address)
| get_neighbour_address |
Neighbour's source address.
Parameters:
rid | Router ID |
interface_id | Interface ID. |
neighbour_address | set if neighbour is found. |
Returns: true if the neighbour is found.
bool on_link_state_request_list (const OspfTypes::NeighbourID nid,
Lsa::LsaRef lsar)
| on_link_state_request_list |
[const]
Is this LSA on this neighbours link state request list.
Returns: true if it is.
bool event_bad_link_state_request (const OspfTypes::NeighbourID nid)
| event_bad_link_state_request |
[const]
Generate a BadLSReq event.
bool virtual_link_endpoint ()
| virtual_link_endpoint |
[const]
Are any of neighbours of this peer a virtual link endpoint.
Returns: true if any are.
void send_direct_acks (OspfTypes::NeighbourID nid,
list<Lsa_header>& ack)
| send_direct_acks |
Send direct ACKs
Parameters:
nid | the neighbour that the LSAs that are being acked arrived on. |
ack | list of acks to send. |
void send_delayed_acks (OspfTypes::NeighbourID nid,
list<Lsa_header>& ack)
| send_delayed_acks |
Send delayed ACKs
Parameters:
nid | the neighbour that the LSAs that are being acked arrived on. |
ack | list of acks to send. |
Neighbour<A> * find_neighbour (A src, OspfTypes::RouterID rid)
| find_neighbour |
bool is_neighbour_DR_or_BDR (OspfTypes::NeighbourID nid)
| is_neighbour_DR_or_BDR |
[const]
Returns: true if this routers neighbour is the DR or BDR.
bool process_hello_packet (A dst, A src, HelloPacket *hello)
| process_hello_packet |
bool process_data_description_packet (A dst, A src,
DataDescriptionPacket *dd)
| process_data_description_packet |
Process a data description packet.
bool process_link_state_request_packet (A dst, A src,
LinkStateRequestPacket *lsrp)
| process_link_state_request_packet |
Process a link state request packet.
bool process_link_state_update_packet (A dst, A src,
LinkStateUpdatePacket *lsup)
| process_link_state_update_packet |
Process a link state update packet.
bool
process_link_state_acknowledgement_packet (A dst, A src,
LinkStateAcknowledgementPacket
*lsap)
| process_link_state_acknowledgement_packet |
Process a link state acknowledgement packet.
void start ()
| start |
Start the protocol machinery running
void stop ()
| stop |
Stop the protocol machinery running
void change_area_router_type (OspfTypes::AreaType area_type)
| change_area_router_type |
void event_interface_up ()
| event_interface_up |
void event_wait_timer ()
| event_wait_timer |
void event_backup_seen ()
| event_backup_seen |
void event_neighbour_change ()
| event_neighbour_change |
void event_loop_ind ()
| event_loop_ind |
void event_unloop_ind ()
| event_unloop_ind |
void event_interface_down ()
| event_interface_down |
void schedule_event (const char *)
| schedule_event |
Schedule an event, used by the neighbours to schedule an interface event.
void process_scheduled_events ()
| process_scheduled_events |
Run all the deferred events, callback method.
AreaRouter<A> * get_area_router ()
| get_area_router |
OspfTypes::RouterID get_candidate_id (A, OspfTypes::RouterID)
| get_candidate_id |
[static]
Returns: the value that should be used for DR or BDR. In OSPFv2 its the source address of the interface. In OSPFv3 its the router ID.
OspfTypes::RouterID get_candidate_id (A = A::ZERO())
| get_candidate_id |
[const]
Returns: the value that should be used for DR or BDR for this router In OSPFv2 its the source address of the interface. In OSPFv3 its the router ID. A dummy argument is used to force an IPv4 and an IPv6 instance of this method to be generated. Isn't C++ cool?
InterfaceState get_state ()
| get_state |
[const]
OspfTypes::LinkType get_linktype ()
| get_linktype |
[const]
Returns: the link type.
Auth& get_auth_handler ()
| get_auth_handler |
Return the authentication handler.
uint32_t send_options ()
| send_options |
Returns: the options field that is placed in some of outgoing packets.
void populate_common_header (Packet& packet)
| populate_common_header |
Fill in the common header parts of the packet.
string pp_interface_state (InterfaceState is)
| pp_interface_state |
[static]
Pretty print the interface state.
OspfTypes::AreaID get_area_id ()
| get_area_id |
[const]
Returns: the Area ID.
OspfTypes::AreaType get_area_type ()
| get_area_type |
[const]
Returns: the Area Type.
void set_area_type (OspfTypes::AreaType area_type)
| set_area_type |
Returns: the Area Type.
void router_id_changing ()
| router_id_changing |
The router ID is about to change.
bool set_network_mask (uint32_t network_mask)
| set_network_mask |
Set the network mask OSPFv2 only.
uint32_t get_network_mask ()
| get_network_mask |
[const]
Set the network mask OSPFv2 only.
bool set_interface_id (uint32_t interface_id)
| set_interface_id |
Set the interface ID OSPFv3 only.
uint32_t get_interface_id ()
| get_interface_id |
[const]
Get the interface ID OSPFv3 only.
bool add_advertise_net (A addr, uint32_t prefix)
| add_advertise_net |
Set a network to advertise OSPFv3 only.
bool remove_all_nets ()
| remove_all_nets |
Remove all the networks that are being advertised OSPFv3 only.
bool update_nets ()
| update_nets |
Calls to add_advertise_net() and remove_all_nets() must be followed by a call to update nets to force a new Link-LSA to be sent out OSPFv3 only.
bool set_hello_interval (uint16_t hello_interval)
| set_hello_interval |
Set the hello interval in seconds.
bool set_options (uint32_t options)
| set_options |
uint32_t get_options ()
| get_options |
[const]
bool set_router_priority (uint8_t priority)
| set_router_priority |
bool set_router_dead_interval (uint32_t router_dead_interval)
| set_router_dead_interval |
Set the router dead interval in seconds.
uint32_t get_router_dead_interval ()
| get_router_dead_interval |
[const]
Get the router dead interval in seconds.
bool set_simple_authentication_key (const string& password,
string& error_msg)
| set_simple_authentication_key |
Set a simple password authentication key.
Note that the current authentication handler is replaced with a simple password authentication handler.
Parameters:
password | the password to set. |
the | error message (if error). |
Returns: true on success, otherwise false.
bool delete_simple_authentication_key (string& error_msg)
| delete_simple_authentication_key |
Delete a simple password authentication key.
Note that after the deletion the simple password authentication handler is replaced with a Null authentication handler.
Parameters:
the | error message (if error). |
Returns: true on success, otherwise false.
bool set_md5_authentication_key (uint8_t key_id, const string& password,
const TimeVal& start_timeval,
const TimeVal& end_timeval,
const TimeVal& max_time_drift,
string& error_msg)
| set_md5_authentication_key |
Set an MD5 authentication key.
Note that the current authentication handler is replaced with an MD5 authentication handler.
Parameters:
key_id | unique ID associated with key. |
password | phrase used for MD5 digest computation. |
start_timeval | start time when key becomes valid. |
end_timeval | end time when key becomes invalid. |
max_time_drift | the maximum time drift among all routers. |
the | error message (if error). |
Returns: true on success, otherwise false.
bool delete_md5_authentication_key (uint8_t key_id, string& error_msg)
| delete_md5_authentication_key |
Delete an MD5 authentication key.
Note that after the deletion if there are no more valid MD5 keys, the MD5 authentication handler is replaced with a Null authentication handler.
Parameters:
key_id | the ID of the key to delete. |
the | error message (if error). |
Returns: true on success, otherwise false.
bool set_passive (bool passive, bool host)
| set_passive |
Toggle the passive status of an interface.
bool get_passive ()
| get_passive |
[const]
If all peers are in state passive then return passive.
bool set_rxmt_interval (uint32_t rxmt_interval)
| set_rxmt_interval |
uint32_t get_rxmt_interval ()
| get_rxmt_interval |
OspfTypes::RouterID get_designated_router ()
| get_designated_router |
[const]
OspfTypes::RouterID get_backup_designated_router ()
| get_backup_designated_router |
[const]
Get the backup designated router.
uint32_t get_designated_router_interface_id (A = A::ZERO())
| get_designated_router_interface_id |
[const]
Get the interface ID of the designated router. OSPFv3 only.
void update_router_links ()
| update_router_links |
Compute the current router link.
Typically called after a state transition.
void adjacency_change (bool up)
| adjacency_change |
Used to notify the peer that a neighbour has become fully adjacent or a neighbour is no longer fully adjacent. Used to trigger the generation or withdrawal of a network-LSA. Should only be called if the interface is in state DR.
Parameters:
up | true if the adjacency became full, false otherwise. |
bool get_neighbour_list (list<OspfTypes::NeighbourID>& neighbours)
| get_neighbour_list |
[const]
Get a list of all the neighbours.
bool get_neighbour_info (OspfTypes::NeighbourID nid,
NeighbourInfo& ninfo)
| get_neighbour_info |
[const]
Get state information about this neighbour.
Parameters:
nid | neighbour information is being request about. |
ninfo | if neighbour is found its information. |
set<AddressInfo<A> >& get_address_info ()
| get_address_info |
Get this list of addresses that should be advertised OSPFv3 only.
bool get_attached_routers (list<RouterInfo>& routers)
| get_attached_routers |
Return a list of the fully adjacent routers.