Network manager sets metrics by default by device type if they are not set otherwise. See man 5 nm-settings. Here is an excerpt, you can search for the word 'metric'. Also note that they differ depending on ip v4 vs v6. not sure if this will help you or not.
ipv4 setting
IPv4 Settings.
┌───────────────────┬───────────────────┬───────────────┬────────────────────────┐
│Key Name │ Value Type │ Default Value │ Value Description │
├───────────────────┼───────────────────┼───────────────┼────────────────────────┤
...
├───────────────────┼───────────────────┼───────────────┼────────────────────────┤
│route-data │ array of vardict │ │ Array of IPv4 routes. │
│ │ │ │ Each route dictionary │
│ │ │ │ contains at least │
│ │ │ │ 'dest' and 'prefix' │
│ │ │ │ entries, containing │
│ │ │ │ the destination IP │
│ │ │ │ address as a string, │
│ │ │ │ and the prefix length │
│ │ │ │ as a uint32. Most │
│ │ │ │ routes will also have │
│ │ │ │ a 'gateway' entry, │
│ │ │ │ containing the gateway │
│ │ │ │ IP address as a │
│ │ │ │ string. If the route │
│ │ │ │ has a 'metric' entry │
│ │ │ │ (containing a uint32), │
│ │ │ │ that will be used as │
│ │ │ │ the metric for the │
│ │ │ │ route (otherwise NM │
│ │ │ │ will pick a default │
│ │ │ │ value appropriate to │
│ │ │ │ the device). │
│ │ │ │ Additional attributes │
│ │ │ │ may also exist on some │
│ │ │ │ routes. │
├───────────────────┼───────────────────┼───────────────┼────────────────────────┤
│route-metric │ int64 │ -1 │ The default metric for │
│ │ │ │ routes that don't │
│ │ │ │ explicitly specify a │
│ │ │ │ metric. The default │
│ │ │ │ value -1 means that │
│ │ │ │ the metric is chosen │
│ │ │ │ automatically based on │
│ │ │ │ the device type. The │
│ │ │ │ metric applies to │
│ │ │ │ dynamic routes, manual │
│ │ │ │ (static) routes that │
│ │ │ │ don't have an explicit │
│ │ │ │ metric setting, │
│ │ │ │ address prefix routes, │
│ │ │ │ and the default route. │
│ │ │ │ Note that for IPv6, │
│ │ │ │ the kernel accepts │
│ │ │ │ zero (0) but coerces │
│ │ │ │ it to 1024 (user │
│ │ │ │ default). Hence, │
│ │ │ │ setting this property │
│ │ │ │ to zero effectively │
│ │ │ │ mean setting it to │
│ │ │ │ 1024. For IPv4, zero │
│ │ │ │ is a regular value for │
│ │ │ │ the metric. │
├───────────────────┼───────────────────┼───────────────┼────────────────────────┤
│route-table │ uint32 │ 0 │ Enable policy routing │
│ │ │ │ (source routing) and │
│ │ │ │ set the routing table │
│ │ │ │ used when adding │
│ │ │ │ routes. This affects │
│ │ │ │ all routes, including │
│ │ │ │ device-routes, IPv4LL, │
│ │ │ │ DHCP, SLAAC, │
│ │ │ │ default-routes and │
│ │ │ │ static routes. But │
│ │ │ │ note that static │
│ │ │ │ routes can │
│ │ │ │ individually overwrite │
│ │ │ │ the setting by │
│ │ │ │ explicitly specifying │
│ │ │ │ a non-zero routing │
│ │ │ │ table. If the table │
│ │ │ │ setting is left at │
│ │ │ │ zero, it is eligible │
│ │ │ │ to be overwritten via │
│ │ │ │ global configuration. │
│ │ │ │ If the property is │
│ │ │ │ zero even after │
│ │ │ │ applying the global │
│ │ │ │ configuration value, │
│ │ │ │ policy routing is │
│ │ │ │ disabled for the │
│ │ │ │ address family of this │
│ │ │ │ connection. Policy │
│ │ │ │ routing disabled means │
│ │ │ │ that NetworkManager │
│ │ │ │ will add all routes to │
│ │ │ │ the main table (except │
│ │ │ │ static routes that │
│ │ │ │ explicitly configure a │
│ │ │ │ different table). │
│ │ │ │ Additionally, │
│ │ │ │ NetworkManager will │
│ │ │ │ not delete any │
│ │ │ │ extraneous routes from │
│ │ │ │ tables except the main │
│ │ │ │ table. This is to │
│ │ │ │ preserve backward │
│ │ │ │ compatibility for │
│ │ │ │ users who manage │
│ │ │ │ routing tables outside │
│ │ │ │ of NetworkManager. │
├───────────────────┼───────────────────┼───────────────┼────────────────────────┤
│routes │ array of array of │ [] │ Deprecated in favor of │
│ │ uint32 │ │ the 'route-data' │
│ │ │ │ property, but this can │
│ │ │ │ be used for │
│ │ │ │ backward-compatibility │
│ │ │ │ with older daemons. │
│ │ │ │ Note that if you send │
│ │ │ │ this property the │
│ │ │ │ daemon will ignore │
│ │ │ │ 'route-data'. Array │
│ │ │ │ of IPv4 route │
│ │ │ │ structures. Each IPv4 │
│ │ │ │ route structure is │
│ │ │ │ composed of 4 32-bit │
│ │ │ │ values; the first │
│ │ │ │ being the destination │
│ │ │ │ IPv4 network or │
│ │ │ │ address (network byte │
│ │ │ │ order), the second the │
│ │ │ │ destination network or │
│ │ │ │ address prefix (1 - │
│ │ │ │ 32), the third being │
│ │ │ │ the next-hop (network │
│ │ │ │ byte order) if any, │
│ │ │ │ and the fourth being │
│ │ │ │ the route metric. If │
│ │ │ │ the metric is 0, NM │
│ │ │ │ will choose an │
│ │ │ │ appropriate default │
│ │ │ │ metric for the device. │
│ │ │ │ (There is no way to │
│ │ │ │ explicitly specify an │
│ │ │ │ actual metric of 0 │
│ │ │ │ with this property.) │
└───────────────────┴───────────────────┴───────────────┴────────────────────────┘
ipv6 setting
IPv6 Settings.
┌───────────────────┬───────────────────────────┬───────────────┬────────────────────────────────────────────────────┐
│Key Name │ Value Type │ Default Value │ Value Description │
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
...
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
│route-data │ array of vardict │ │ Array of IPv6 routes. Each route dictionary │
│ │ │ │ contains at least 'dest' and 'prefix' entries, │
│ │ │ │ containing the destination IP address as a string, │
│ │ │ │ and the prefix length as a uint32. Most routes │
│ │ │ │ will also have a 'next-hop' entry, containing the │
│ │ │ │ next hop IP address as a string. If the route has │
│ │ │ │ a 'metric' entry (containing a uint32), that will │
│ │ │ │ be used as the metric for the route (otherwise NM │
│ │ │ │ will pick a default value appropriate to the │
│ │ │ │ device). Additional attributes may also exist on │
│ │ │ │ some routes. │
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
│route-metric │ int64 │ -1 │ The default metric for routes that don't │
│ │ │ │ explicitly specify a metric. The default value -1 │
│ │ │ │ means that the metric is chosen automatically │
│ │ │ │ based on the device type. The metric applies to │
│ │ │ │ dynamic routes, manual (static) routes that don't │
│ │ │ │ have an explicit metric setting, address prefix │
│ │ │ │ routes, and the default route. Note that for IPv6, │
│ │ │ │ the kernel accepts zero (0) but coerces it to 1024 │
│ │ │ │ (user default). Hence, setting this property to │
│ │ │ │ zero effectively mean setting it to 1024. For │
│ │ │ │ IPv4, zero is a regular value for the metric. │
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
│route-table │ uint32 │ 0 │ Enable policy routing (source routing) and set the │
│ │ │ │ routing table used when adding routes. This │
│ │ │ │ affects all routes, including device-routes, │
│ │ │ │ IPv4LL, DHCP, SLAAC, default-routes and static │
│ │ │ │ routes. But note that static routes can │
│ │ │ │ individually overwrite the setting by explicitly │
│ │ │ │ specifying a non-zero routing table. If the table │
│ │ │ │ setting is left at zero, it is eligible to be │
│ │ │ │ overwritten via global configuration. If the │
│ │ │ │ property is zero even after applying the global │
│ │ │ │ configuration value, policy routing is disabled │
│ │ │ │ for the address family of this connection. Policy │
│ │ │ │ routing disabled means that NetworkManager will │
│ │ │ │ add all routes to the main table (except static │
│ │ │ │ routes that explicitly configure a different │
│ │ │ │ table). Additionally, NetworkManager will not │
│ │ │ │ delete any extraneous routes from tables except │
│ │ │ │ the main table. This is to preserve backward │
│ │ │ │ compatibility for users who manage routing tables │
│ │ │ │ outside of NetworkManager. │
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
│routes │ array of legacy IPv6 │ [] │ Deprecated in favor of the 'route-data' property, │
│ │ route struct (a(ayuayu)) │ │ but this can be used for backward-compatibility │
│ │ │ │ with older daemons. Note that if you send this │
│ │ │ │ property the daemon will ignore 'route-data'. │
│ │ │ │ Array of IPv6 route structures. Each IPv6 route │
│ │ │ │ structure is composed of an IPv6 address, a prefix │
│ │ │ │ length (1 - 128), an IPv6 next hop address (which │
│ │ │ │ may be zeroed out if there is no next hop), and a │
│ │ │ │ metric. If the metric is 0, NM will choose an │
│ │ │ │ appropriate default metric for the device. │
├───────────────────┼───────────────────────────┼───────────────┼────────────────────────────────────────────────────┤
│token │ string │ │ Configure the token for │
│ │ │ │ draft-chown-6man-tokenised-ipv6-identifiers-02 │
│ │ │ │ IPv6 tokenized interface identifiers. Useful with │
│ │ │ │ eui64 addr-gen-mode. │
└───────────────────┴───────────────────────────┴───────────────┴────────────────────────────────────────────────────┘