diff --git a/standard/ietf/RFC/ietf-rib-extension.yang b/standard/ietf/RFC/ietf-rib-extension.yang
new file mode 120000
index 000000000..d30d573fe
--- /dev/null
+++ b/standard/ietf/RFC/ietf-rib-extension.yang
@@ -0,0 +1 @@
+ietf-rib-extension@2023-11-20.yang
\ No newline at end of file
diff --git a/standard/ietf/RFC/ietf-rib-extension@2023-11-20.yang b/standard/ietf/RFC/ietf-rib-extension@2023-11-20.yang
new file mode 100644
index 000000000..4820c5bb8
--- /dev/null
+++ b/standard/ietf/RFC/ietf-rib-extension@2023-11-20.yang
@@ -0,0 +1,351 @@
+module ietf-rib-extension {
+ yang-version 1.1;
+ namespace "urn:ietf:params:xml:ns:yang:ietf-rib-extension";
+ prefix rib-ext;
+
+ import ietf-inet-types {
+ prefix inet;
+ reference
+ "RFC 6991: Common YANG Data Types";
+ }
+ import ietf-interfaces {
+ prefix if;
+ reference
+ "RFC 8343: A YANG Data Model for Interface
+ Management";
+ }
+ import ietf-routing {
+ prefix rt;
+ reference
+ "RFC 8349: A YANG Data Model for Routing
+ Management (NMDA Version)";
+ }
+ import ietf-ipv4-unicast-routing {
+ prefix v4ur;
+ reference
+ "RFC 8349: A YANG Data Model for Routing
+ Management (NMDA Version)";
+ }
+ import ietf-ipv6-unicast-routing {
+ prefix v6ur;
+ reference
+ "RFC 8349: A YANG Data Model for Routing
+ Management (NMDA Version)";
+ }
+
+ import ietf-ospf {
+ prefix ospf;
+ reference "RFC 9129: YANG Data Model for the OSPF Protocol";
+ }
+
+ import ietf-isis {
+ prefix isis;
+ reference "RFC 9130: YANG Data Model for the IS-IS Protocol";
+ }
+
+ organization
+ "IETF RTGWG (Routing Area Working Group)";
+ contact
+ "WG Web:
+ WG List:
+
+ Author: Acee Lindem
+
+ Author: Yingzhen Qu
+ ";
+ description
+ "This YANG module extends the RIB defined in the ietf-routing
+ YANG module with additional route attributes.
+
+ This YANG module conforms to the Network Management
+ Datastore Architecture (NMDA) as described in RFC 8342.
+
+ Copyright (c) 2023 IETF Trust and the persons identified as
+ authors of the code. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or
+ without modification, is permitted pursuant to, and subject to
+ the license terms contained in, the Revised BSD License set
+ forth in Section 4.c of the IETF Trust's Legal Provisions
+ Relating to IETF Documents
+ (https://trustee.ietf.org/license-info).
+
+ This version of this YANG module is part of RFC 9403; see the
+ RFC itself for full legal notices.";
+
+ revision 2023-11-20 {
+ description
+ "Initial version.";
+ reference
+ "RFC 9403: A YANG Data Model for RIB Extensions";
+ }
+
+ /* Groupings */
+
+ grouping rib-statistics {
+ description
+ "Statistics grouping used for RIB augmentation.";
+ container statistics {
+ config false;
+ description
+ "Container for RIB statistics.";
+ leaf total-routes {
+ type uint32;
+ description
+ "Total number of routes in the RIB.";
+ }
+ leaf total-active-routes {
+ type uint32;
+ description
+ "Total number of active routes in the RIB. An active
+ route is the route that is preferred over other routes
+ to the same destination prefix.";
+ }
+ leaf total-route-memory {
+ type uint64;
+ units "bytes";
+ description
+ "Total memory for all routes in the RIB.";
+ }
+ list protocol-statistics {
+ description
+ "RIB statistics for routing protocols installing
+ routes in the RIB.";
+ leaf protocol {
+ type identityref {
+ base rt:routing-protocol;
+ }
+ description
+ "Routing protocol installing routes in the RIB.";
+ }
+ leaf routes {
+ type uint32;
+ description
+ "Total number of routes in the RIB for the routing
+ protocol identified by the 'protocol' entry.";
+ }
+ leaf active-routes {
+ type uint32;
+ description
+ "Total number of active routes in the RIB for the
+ routing protocol identified by the 'protocol' entry.
+ An active route is preferred over other routes to the
+ same destination prefix.";
+ }
+ leaf route-memory {
+ type uint64;
+ units "bytes";
+ description
+ "Total memory for all routes in the RIB for the
+ routing protocol identified by the 'protocol'
+ entry.";
+ }
+ }
+ }
+ }
+
+ grouping repair-path {
+ description
+ "Grouping for the IP Fast Reroute (IPFRR) repair path.";
+ container repair-path {
+ description
+ "IPFRR next-hop repair path.";
+ leaf outgoing-interface {
+ type if:interface-state-ref;
+ description
+ "Name of the outgoing interface.";
+ }
+ leaf next-hop-address {
+ type inet:ip-address-no-zone;
+ description
+ "IP address of the next hop.";
+ }
+ leaf metric {
+ type uint32;
+ description
+ "The metric for the repair path. While the reroute
+ repair is local and the metric is not advertised
+ externally, the metric for the repair path is useful
+ for troubleshooting purposes.";
+ }
+ reference
+ "RFC 5714: IP Fast Reroute Framework";
+ }
+ }
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/"
+ + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/"
+ + "v4ur:simple-next-hop" {
+ description
+ "Augment 'simple-next-hop' case in IPv4 unicast route.";
+ leaf preference {
+ type uint32;
+ default "1";
+ description
+ "The preference is used to select among multiple static
+ routes. Routes with a lower next-hop preference value
+ are preferred, and equal-preference routes result in
+ Equal-Cost Multipath (ECMP) static routes.";
+ }
+ leaf tag {
+ type uint32;
+ default "0";
+ description
+ "The tag is a 32-bit opaque value associated with the
+ route that can be used for policy decisions such as
+ advertisement and filtering of the route.";
+ }
+ }
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/rt:static-routes/v4ur:ipv4/"
+ + "v4ur:route/v4ur:next-hop/v4ur:next-hop-options/"
+ + "v4ur:next-hop-list/v4ur:next-hop-list/v4ur:next-hop" {
+ description
+ "Augment static route configuration 'next-hop-list'.";
+ leaf preference {
+ type uint32;
+ default "1";
+ description
+ "The preference is used to select among multiple static
+ routes. Routes with a lower next-hop preference value
+ are preferred, and equal-preference routes result in
+ ECMP static routes.";
+ }
+ leaf tag {
+ type uint32;
+ default "0";
+ description
+ "The tag is a 32-bit opaque value associated with the
+ route that can be used for policy decisions such as
+ advertisement and filtering of the route.";
+ }
+ }
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/"
+ + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/"
+ + "v6ur:simple-next-hop" {
+ description
+ "Augment 'simple-next-hop' case in IPv6 unicast route.";
+ leaf preference {
+ type uint32;
+ default "1";
+ description
+ "The preference is used to select among multiple static
+ routes. Routes with a lower next-hop preference value
+ are preferred, and equal-preference routes result in
+ ECMP static routes.";
+ }
+ leaf tag {
+ type uint32;
+ default "0";
+ description
+ "The tag is a 32-bit opaque value associated with the
+ route that can be used for policy decisions such as
+ advertisement and filtering of the route.";
+ }
+ }
+
+ augment "/rt:routing/rt:control-plane-protocols/"
+ + "rt:control-plane-protocol/rt:static-routes/v6ur:ipv6/"
+ + "v6ur:route/v6ur:next-hop/v6ur:next-hop-options/"
+ + "v6ur:next-hop-list/v6ur:next-hop-list/v6ur:next-hop" {
+ description
+ "Augment static route configuration 'next-hop-list'.";
+ leaf preference {
+ type uint32;
+ default "1";
+ description
+ "The preference is used to select among multiple static
+ routes. Routes with a lower next-hop preference value
+ are preferred, and equal-preference routes result in
+ ECMP static routes.";
+ }
+ leaf tag {
+ type uint32;
+ default "0";
+ description
+ "The tag is a 32-bit opaque value associated with the
+ route that can be used for policy decisions such as
+ advertisement and filtering of the route.";
+ }
+ }
+
+ augment "/rt:routing/rt:ribs/rt:rib" {
+ description
+ "Augment a RIB with statistics.";
+ uses rib-statistics;
+ }
+
+ augment "/rt:routing/rt:ribs/rt:rib/"
+ + "rt:routes/rt:route" {
+ description
+ "Augment a route in the RIB with common attributes.";
+ leaf metric {
+ when "not(derived-from("
+ + "../rt:source-protocol, 'ospf:ospf')) "
+ + "and not(derived-from( "
+ + "../rt:source-protocol, 'isis:isis'))" {
+ description
+ "This augmentation is only valid for routes that don't
+ have OSPF or IS-IS as the source protocol. The YANG
+ data models for OSPF and IS-IS already include a
+ 'metric' augmentation for routes.";
+ }
+ type uint32;
+ description
+ "The metric is a numeric value indicating the cost
+ of the route from the perspective of the routing
+ protocol installing the route. In general, routes with
+ a lower metric installed by the same routing protocol
+ are lower cost to reach and are preferable to routes
+ with a higher metric. However, metrics from different
+ routing protocols are not comparable.";
+ }
+ leaf-list tag {
+ when "not(derived-from("
+ + "../rt:source-protocol, 'ospf:ospf')) "
+ + "and not(derived-from( "
+ + "../rt:source-protocol, 'isis:isis'))" {
+ description
+ "This augmentation is only valid for routes that don't
+ have OSPF or IS-IS as the source protocol. The YANG
+ data models for OSPF and IS-IS already include a 'tag'
+ augmentation for routes.";
+ }
+ type uint32;
+ description
+ "A tag is a 32-bit opaque value associated with the
+ route that can be used for policy decisions such as
+ advertisement and filtering of the route.";
+ }
+ leaf application-tag {
+ type uint32;
+ description
+ "The application-specific tag is an additional tag that
+ can be used by applications that require semantics and/or
+ policy different from that of the tag. For example,
+ the tag is usually automatically advertised in OSPF
+ AS-External Link State Advertisements (LSAs) while this
+ application-specific tag is not advertised implicitly.";
+ }
+ }
+
+ augment "/rt:routing/rt:ribs/rt:rib/"
+ + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/"
+ + "rt:simple-next-hop" {
+ description
+ "Augment 'simple-next-hop' with 'repair-path'.";
+ uses repair-path;
+ }
+
+ augment "/rt:routing/rt:ribs/rt:rib/"
+ + "rt:routes/rt:route/rt:next-hop/rt:next-hop-options/"
+ + "rt:next-hop-list/rt:next-hop-list/rt:next-hop" {
+ description
+ "Augment the next hop with a repair path.";
+ uses repair-path;
+ }
+}