Releases: aristanetworks/EosSdk
Releases · aristanetworks/EosSdk
EOS SDK v1.13.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- New
acl_mgr
APIs to validate received UDP packets or TCP connections against a configured Service ACL, incrementing the ACLs counter in the process. Note that these APIs only take effect for EOS4.19.0F
and above, where Service ACLs are supported. - New fc18-compatible cross-compiler is available on
Arista’s Software Download page
.
Bugs fixes and improvements
- Added
mount_profile_eossdk_all
(a default mount profile for any EosSdk agent) to the stubs tarball. This addition also simplifies the process of packaging both an agent and its mount profile together into an RPM. Please refer to the Mount Profile section of EosSdk’s Quickstart Guide for further details.
EOS SDK v1.12.3
Resources
- Online API Documentation
- EosSdk RPMs
Features
- Automatic version checking to avoid binary incompatibilities. EosSdk release numbers are formatted: MAJOR.MINOR.PATCH. EosSdk agent binaries compiled in a stubs environment are now set to link against libeos.so.MAJOR.MINOR. When the agent binary is run on a switch, it will fail to link the switch’s libeos.so if the major and minor versions do not match.
Bugs fixes and improvements
- The force keyword is no longer necessary when installing an EosSdk RPM as an extension on top of the base version found in EOS.swi.
- Moving an LAG interface to MLAG configuration no longer causes an error in the
interface module
callback handlers. - Re-bootstrapping inside a stubs environment no longer hangs during the patch step.
- Fix default resync mode in
policy_map.h
module. - Added more incremental interface link speeds for the
eth_phy_intf.h
module, as well as support for unrecognized link speeds in the future.
EOS SDK v1.12.0
Resources
- Online API Documentation
- EosSdk RPMs
Bugs fixes and improvements
- The
EosSdk-mp
RPM is now merged with theEosSdk
RPM. - Calling
nexthop_group_set()
on a nexthop group that already exists, that is carrying the same name and type, no longer retains old entries from the larger existing group when autosize is enabled. get_fib_mgr()
no longer crashes when returning a read-only FIB manager.- New
FibAclSync
example which monitors routes in a VRF and ensures a corresponding permit ACL rule exists for each route. User is able to configure options such asIPv4 ACL
,IPv6 ACL
,VRF name
,route type
, andACL batch update timer min/max
.
EOS SDK v1.11.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- Added the ability to set the dynamic resizing of nexthop groups. When enabled, automatic resizing removes unresolved entries from nexthop groups which reduces the number of entries occupying the hardware table and decreases the amount of time traffic will be hashed to an unreachable destination. The feature is disabled by default and can be turned on with the new
autosize_is()
setter innexthop_group.h
. Enabling the feature causes re-hashing of existing flows when a group’s resolved entries set changes. - Added
neighbor_table_status_iter()
toneighbor_table.h
, which iterates over resolved ARP and Neighbor Discovery tables.
Bugs fixes and improvements
- API Change:
neighbor_table.h
- Added manager function
neighbor_table_status_iter()
, which iterates over resolved ARP and Neighbor Discovery tables.
- Added manager function
- Handlers and manager methods are now thread-safe and automatically grab the
scoped lock
. Iterator objects are not protected after being returned. Customers should grab the scoped lock prior to accessing iterators. - When an EosSdk agent listens to an existing BFD session, the first callback of
on_bfd_session_status()
for that session will yield the session’s actual status instead ofBFD_SESSION_STATUS_DOWN
. - Added support for additional MAC entry types in
mac_table.h
. New types are:MAC_ENTRY_EVPN_DYNAMIC_REMOTE
MAC_ENTRY_EVPN_CONFIGURED_REMOTE
MAC_ENTRY_PEER_EVPN_REMOTE
MAC_ENTRY_CONFIGURED_ROUTER
MAC_ENTRY_PEER_ROUTER
MAC_ENTRY_EVPN_INTF
- Improved error handling in
directflow.h
with new enum typeFLOW_REJECTED_ACTIONS_UNSUPPORTED
. - Helpful debug tracing added before
panic
ing when not able to grab the scoped lock.
EOS SDK v1.10.2
Resources
- Online API Documentation
- EosSdk RPMs
Bugs fixes and improvements
- The SDK now keeps track of how many agents have grabbed the
sdk_scoped_lock
. In a multithreaded/multiple-agent scenario where an agent releases its lock, the SDK will no longer erroneously report that the lock has not been grabbed. - Fix unsafe usage of
fprintf()
in the EOS SDK stubs, which caused some compilers to throw aformat-security
error.
EOS SDK v1.10.1
Resources
- Online API Documentation
- EosSdk RPMs
Features
- The
acl.h
module now follows dynamic/persistent semantics. To mark an ACL as persistent (i.e., have it show up in running-config), callacl_mgr->persistent_is(acl_key, true)
. By default, ACLs will be programmed as dynamic (non-persistent) so they won’t show up in the CLI and conflict with config-replace operations.
Bugs fixes and improvements
- Expose
ip_route_via_t
’s during iteration fornexthop_group
anddrop
routes. This regression was introduced in 1.10.0.
EOS SDK v1.10.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- New method
register_vrf()
for VRF-awareness in the Forwarding Information Basefib.h
module. - New
system_mac()
method insystem.h
to retrieve the system MAC address of the device. intf.h
now provides new methods to translate between kernel and EOS interface names.- In multithreaded applications, EOS SDK will now throw an exception if the agent does not grab a scoped lock before making an SDK call. This prevents race conditions when multiple threads attempt to use the SDK simultaneously.
Bugs fixes and improvements
- API Change:
bfd.h
- New
BFD_SESSION_TYPE_MICRORFC7130
value forbfd_session_type_t
enumerated type.
- New
- API Change:
mac_table.h
- New
MAC_ENTRY_EVPN_REMOTE_MAC
andMAC_ENTRY_PEER_EVPN_REMOTE_MAC
values formac_entry_type_t
enumerated type.
- New
- API Change:
nexthop_group.h
- New
NEXTHOP_GROUP_IP
value fornexthop_group_encap_t
enumerated type, for IP type with no encapsulation.
- New
- ACLs that have not been committed are now no longer deleted when enabling counters or fragments with
acl_counters_enabled_set()
oracl_fragments_enabled_set()
inacl.h
class_map.h
now handles IPv6 match rules.ip_route.h
We now set the Nexthop Group name attribute of anip_route_t
inip_route_set()
if the route is already programmed with an existing
ip_route_t
if the Nexthop Group viaip_route_via_t
exists. This reduces update churn.ip_addr_mask_t
s now print in a consistent format for both IPv4 and IPv6 address masks.- All SDK custom types now have hash functions.
- Examples:
PolicyDemo.cpp
has been cleaned up to use the API properly when setting class-maps and policy-maps via use of thepersistent
flag attribute.
- Improvements to the API’s documentation.
EOS SDK v1.8.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- A new
bfd.h
module that provides access to Bidirectional Forwarding Detection status and configuration, thereby allowing clients to monitor connectivity to their neighboring devices. Using these APIs, an EOS SDK agent can configure new BFD sessions and, most importantly, react to a session's connection status. - In
mpls_route.h
, new APIs expose handlers and getters for the LFIB. The newmpls_route_handler
notifies clients when an MPLS route is added or removed from the switch's hardware tables, while the newstatus
iterators and getters in thempls_route_mgr
let clients inspect the current state about which MPLS routes and vias are programmed into hardware. - New features in the
fib.h
module:- A
fib_via_t
now exposes the MPLS label for a via in the FIB. - VRF support.
- A
- An additional handler in
policy_map.h
,on_policy_map_config_set
, that provides alerts when a Policy Map's configuration changes. - The
acl.h
now exposes the Nexthop group for theacl_rule_ip_t
type.
Bugs fixes and improvements
- API Change:
lldp.h
- This module is no longer in BETA.
- Breaking change (from BETA release): all manager and handler methods now use
lldp_neighbor_t
instead ofintf_id_t
as an input parameter. - New
lldp_neighbor_t
andlldp_remote_system_t
types, to identify a remote system seen from the local switch. - New iterators for remote systems, LLDP interfaces, and LLDP neighbors.
- API Change:
fib.h
- New
ROUTE_TYPE_OSPF3
value forfib_route_type_t
enumerated type.
- New
- API Change:
policy_map.h
policy_map_rule_t
now has newpolicy_map_rule_type_t
enumerated type andacl_rule_ip_t
IP address attributes for matching class maps or raw match rules.policy_action_t
now has an attribute to store the VRF.
- API Change:
nexthop_group.h
- New
NEXTHOP_GROUP_MPLS_OVER_GRE
value fornexthop_group_encap_t
enumerated type.
- New
- Various examples:
RibToFibProfiler.cpp
, which profiles the amount of time it takes for a route to be programmed in the FIB.
- Improvements to the API’s documentation.
EOS SDK v1.7.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- Greatly expand the
mac_table.h
module, including:- A new
mac_table_handler
that provideson_mac_entry_set()
andon_mac_entry_del()
callbacks when unicast MAC entries are learned or forgotten. This allows agents to take action when a MAC entry is programmed into hardware, both for dynamically learned and statically configured entries. - An expanded
mac_table_mgr
, which provides accessors and mutators to retrieve status about MAC entries, as well as modify the MAC address table.
- A new
- Introduce a new
hardware_table.h
module that exposes the usage statistics for the various hardware tables used by the system. This is useful for agents that want to track how many entries are used or available across the various tables, either for monitoring purposes or so they can take specific actions when a table is close to becoming full. This module includes the following APIs:- A
hardware_table_handler
, which provides callbacks when the usage statistics for a single table/feature/chip combination update. - A
hardware_table_mgr
that provides iterators, accessors, and additional details for the various hardware tables on the system. - This modules is only compatible on EOS releases numbered 4.15.2F or greater, and is currently supported for a subset of Arista's platforms.
- A
- A new
lldp.h
module, currently in beta, which provides access to the switch's LLDP configuration and status. This includes:- A new
lldp_handler
class, containing handler methods to react to various changes advertised by a remote system, including the remote interface, version, and ip address, among other pieces of information. - A new
lldp_mgr
class, containing accessor and mutator methods to check the status of TLV entries and modify the set of TLVs.
- A new
- Add utility methods on the
eth_addr_t
value type that let agents determine whether a MAC address is a unicast, multicast, or broadcast address. - Add a
membership_del()
method toeth_lag_intf_mgr
. - Introduce a new
ip_route_set(ip_route_t, ip_route_action_t)
method that now takes a 'type' parameter. This optional hint lets the SDK program nexthop-group and drop routes more efficiently, if the agent knows in advance what type of vias will be associated with the route. - Add a new
exists(vrf_name)
method, which checks if a VRF has been configured. - Introduce a
neighbor_table_iter
manager method to iterate over configured neighbor entries. - Add the ability to flush the
event_loop
to ensure that all updates from the agent have made it to Sysdb. This is useful forevent_loop
scripts that want to make sure all updates have applied before exiting. - Expost the
Management0
interface in both theintf.h
andeth_intf.h
modules. - Create a utility
neighbor_key_t(ip_addr_t)
constructor to make querying ARP entries easier. - Create a utility
mpls_route_via_t
constructor that takes a label actionmpls_action_t
. - Add examples to demonstrate usage of some of these new EOS SDK features.
- Add a helper Python module at
examples/eossdk_utils.py
that provides debugging utilities for users developing Python agents.
Bugs fixes and improvements
- API Change: The
vrf.h
module has been improved to maintain consistency with other EOS SDK APIs, and includes the following changes:- Deprecate the
vrf()
accessor and add a top level accessor to be more consistent with other managers. - Breaking change: new
watch_vrf
andwatch_all_vrfs
methods to enable or suppress handler events. Agents that wish to receive VRF status updates must now callwatch_all_vrfs(true)
orwatch_vrf(vrf_name, true)
. - Bug fix: Our handlers now properly react to VRF status changes for VRFs that existed before the agent started up.
- Remove
VRF_CONFIGURED
enum value. - The iterator has been simplified to yield the
vrf_name
and only iterates over configured entries.
- Deprecate the
- API Change: The
neighbor_table.h
module has been improved to maintain consistency with other EOS SDK APIs, and includes the following changes:- Breaking change: new
watch_neighbor_entry()
andwatch_all_neighbor_entries()
methods to enable or suppress handler events. Agents that wish to receive status updates must now callwatch_all_neighbor_entries(true)
. - Neighbor table accessors no longer panic, and instead return sane default values (for example,
neighbor_entry_del()
is now idempotent, andneighbor_entry()
returns an emptyneighbor_entry_t()
if the entry does not exist.
- Breaking change: new
- API Change: Getter for
ip_route_mgr
now does not panic, and instead returns an emptyip_route_t()
object. - Bug fix: We now suppress duplicate
directflow_handler::on_flow_status
notifications during internal state changes. - Bug fix: Properly fill-in the
mpls_label_t
forip_route_via_t
objects returned byip_route_mgr::ip_route_via_iter()
. - Bug fix: The
acl_rule_del()
andacl_del()
mutator functions have been fixed and now take effect afteracl_commit()
. - Panic if an
mpls_route_via_t
object contains aMPLS_ACTION_POP
action, but no hop is set. - Fix a potential deadlock when the agent receives a SIGINT or SIGTERM.
- In
ip_intf.h
, theip_addrs(intf_id_t)
accessor now returns an empty set instead of panicking when anintf_id_t
does not exist in the routing table. - The
directflow.h
module returns a newFLOW_STATUS_UNKNOWN
enum value instead of panicking for unknown OpenFlow status. - Improvements to the API’s documentation.
v1.6.0
EOS SDK v1.6.0
Resources
- Online API Documentation
- EosSdk RPMs
Features
- Make our various
intf
handlers more consistent. Previously, the SDK had no guarantees that an interface that was valid in one interface manager could also be used in a different manager upon interface creation. Now an interface thatexists()
for one manager consistentlyexists()
for all other compatible managers. For example, when a new PortChannel is created, theon_*_intf_create()
handlers foreth_lag_intf
,eth_intf
andintf
will fire, and all of the methods those managers expose will work on the newly created interface. For more details, see the appendix at the bottom. - Introduce APIs to determine if a front panel port is physically present through the new
eth_phy_intf.h
'son_eth_phy_intf_hardware_present(...)
handler andeth_phy_intf_mgr::hardware_present()
accessor. This is useful for modular systems where physical interfaces can dynamically show up independent of when the configuration exists. - Add a
counter()
accessor to thenexthop_group.h
module, which lets users access the per-entry byte and packet counters for a nexthop group. - Introduce handlers when a LAG interface is created or deleted in
eth_lag_intf
. - Add an accessor for getting existing decap group configuration in
decap_group.h
- Expose VXLAN type interfaces as interface type
eos::INTF_TYPE_VXLAN
- Add an
exists()
method to thesubintf
andeth_lag_intf
managers. - Let users configure
mpls_route_via_t
's to bypass any configured egress ACLs with theskip_egress_acl()
flag. - Add setters to
eth_lag_intf.h
's manager for updating a LAG'smin_links
,fallback_type
, andfallback_timeout
. - Add an
exists()
method to thesubintf.h
module. - Move to Swig 1.3.0, which generally improves our Python bindings.
Bugs and fixes
- API Change: Interfaces now look at configuration to determine existence, and iterates over interfaces that have a valid configuration, as opposed to a status.
- API Change: Re-organize the
eth_lag_intf.h
module. Contained in this set of changes is:- Introduce top level accessors for getting and setting attributes of a port channel, instead of returning large status objects. We've made this change to be more consistent with our other managers and to make this module easier to use.
- Remove the cumbersome
eth_lag_intf_
prefix to manager methods. The old methods still exist, but are now deprecated, and now names are much more succinct, i.e.lag_mgr->membership_status(...)
instead oflag_mgr->eth_lag_intf_membership_status(...)
. This also applies to themember_mode
andmember_priority
accessors. eth_lag_intf_membership_t
andeth_lag_intf_t
are now deprecated, as we now have top level accessors for their corresponding data. Additionally we've removed their mutator functions. These types have always been read-only, but previously had useless setters for its attributes. A new constructor lets this type be created in one shot instead of using the setters.eth_lag_intf_is()
now has avoid
return type, consistent with our other manager's.
- Properly expose nexthop group vias and drop vias in the
ip_route_via_iter_t
. Previously, this iterator would sometimes omit these routes - Properly set
decap_group_t
'spersistent()
flag on read. - Increase the maximum nexthopgroup name size to 256 characters.
- Improvements to the
ip_intf.h
module, including supportinginternal_vlan_id()
for VLAN interfaces, letting users call ip_addr_is() with overlapping subsets of IPv4 addresses over subsequent calls, and suppressing duplicateon_ip_addr_add
handler events in certain circumstances. - More robust handling of our internal interface types. Previously, certain internal interfaces could cause an agent crash when their state changed.
- Make
tracing.h
's methodsconst
. - Move the enum
mgr_mode_type_t
's definition frombase.h
totypes/sdk.h
, and make the enum accessible from Python - Make Python handle SIGTERM properly. Previously Python agents would not respond
Ctrl-C
, now Python gracefully exit on SIGTERM and SIGINT. These default signal handlers can be overridden using the Linuxsignal()
APIs, and can be manually invoked bysdk.h
's newdefault_signal_handler
method. - Produce a Python stack trace when a Python exception bubbles up from a handler.
- More consistent usage of exceptions when agents make invalid SDK calls.
- Better internal tracing (which are visible by changing the agent's trace settings to include
EosSdk*
) - Improve comments throughout our header files.
Appendix: Interface interaction
The following table shows which interface types are compatible with which manager:
Example intf | eos::INTF_TYPE |
intf_mgr | eth_intf_mgr | eth_phy_intf | eth_lag_intf_mgr | subintf_mgr |
---|---|---|---|---|---|---|
Ethernet3/1 | _ETH | X | X | X | ||
Management1 | _ETH | X | X | X | ||
Port-Chanel6 | _LAG | X | X | X | ||
Ethernet2.2 | inherited | X | X | X | ||
Vlan3 | _VLAN | X | X | |||
Vxlan8 | _VXLAN | X | X | |||
Loopback2 | _LOOPBACK | X |
Null0
and the Cpu
interfaces are symbolic, and are not compatible with any interface manager. Subinterfaces may be of type _ETH
or _LAG
, and can be identified using the intf_id_t::is_subintf()
accessor.
The example output of a simple agent that just trace
s all handler activity it sees, for various interfaces. The lines preceded by !
were the CLI commands that triggered the following traces. As you can see, when an interface is created, all of the corresponding manager's on_intf_create
methods also fire. The order is from the most specific manager to the least specific manager.
===== Output from /mnt/flash/IntfReactor [] (PID=13234) started May 17 14:44:12 ===
2015-05-17 14:44:13.683743 13234 IntfReactor 0 Agent initialized
! lf202(config)#int vlan3
2015-05-17 14:44:43.493104 13234 IntfReactor 0 on_eth_intf_create(Vlan3)
2015-05-17 14:44:43.493978 13234 IntfReactor 0 on_intf_create(Vlan3)
! lf202(config-if-Po5)#
2015-05-17 14:45:12.463805 13234 IntfReactor 0 on_eth_lag_intf_create(Port-Channel5)
2015-05-17 14:45:12.464738 13234 IntfReactor 0 on_eth_intf_create(Port-Channel5)
2015-05-17 14:45:12.465467 13234 IntfReactor 0 on_intf_create(Port-Channel5)
! lf202(config-if-Po5)#int et2
! lf202(config-if-Et2)#channel-group 5 mode on
2015-05-17 14:46:02.337321 13234 IntfReactor 0 LAG Port-Channel5 added member Ethernet2
2015-05-17 14:46:02.337522 13234 IntfReactor 0 LAG Port-Channel5 changed speed to 10000
! lf202(config-if-Et2)#no channel-group 5
2015-05-17 14:46:29.452142 13234 IntfReactor 0 LAG Port-Channel5 removed member Ethernet2
2015-05-17 14:46:29.452325 13234 IntfReactor 0 LAG Port-Channel5 changed speed to 0
! lf202(config)#int et2.2
2015-05-17 14:46:56.842031 13234 IntfReactor 0 on_eth_intf_create(Ethernet2.2)
2015-05-17 14:46:56.842862 13234 IntfReactor 0 on_intf_create(Ethernet2.2)