The classes in libfeaclient exist to maintain and synchronize interface configuration state between processes. Their design assumes that a single process, the FEA, is responsible for maintaining interface configuration state. The FEA updates the configuration state based on information from forwarding hardware and configuration requests from the router manager.
With libfeaclient the interface configuration information is held within an IfMgrIfTree instance. An IfMgrIfTree instance contains all the information associated with physical interfaces, virtual interfaces, and addresses associated with virtual interfaces. Within the IfMgrIfTree class, physical interfaces are represented by IfMgrIfAtom instances, virtual interfaces by IfMgrVifAtom instances, and addresses by instances of IfMgrIPv4Atom and IfMgrIPv6Atom.
An instance of the IfMgrIfTree is maintained by the FEA and by remote processes. In the FEA the IfMgrIfTree instance is contained with an IfMgrXrlReplicationManager and at the far end within an IfMgrXrlMirror instance. Configuration and forwarding of state occurs through the submission of command objects to the FEA's IfMgrXrlReplicationManager. The command is dispatched on the local IfMgrIfTree instance and if successful forwarded to each remote IfMgrXrlMirror instance.
FEA Remote Process1 IfMgrCommand ---> IfMgrReplicationManager + - - - - - - - - > IfMgrXrlMirror | ^ | | ^ V | | V | IfMgrIfTree | IfMgrIfTree | | | Remote Process2 | + - - - - - - - - > IfMgrXrlMirror | ^ V | IfMgrIfTree
The base class for command objects is IfMgrCommandBase. The majority of commands are configuration commands for the objects contained within an IfMgrIfTree. Configuration commands exist for each attribute of each object type. The interface exposed by IfMgrCommandBase ensures that each command implements an execute() method and a forward() method. The execute() method applies the command to the local IfMgrIfTree and the forward() method forwards the command object as an Xrl to a remote target.
In addition to configuration commands, there are also "hint" commands that pass hints to the remote IfMgrXrlMirror. Example hint commands are IfMgrHintTreeComplete, to hint that the complete IfMgrIfTree configuration has been sent, and IfMgrHintUpdatesMade, to hint that updates have been made. The IfMgrXrlMirror will pass hints on to objects implementing the IfMgrXrlMirrorRouterObserver interface.