On Mon, 2019-03-04 at 22:11 +0800, Gris Ge wrote:
> Based on feedbacks, this is V2 scheme for review:
> 
> ```
>     {
>         "routes": {
>             "ipv4": [       # Sorted with 'table-id' then
> 'destination'
>                 {
>                     "status": "up",
>                         # up or absent(to be removed)
>                         # If not defined, use 'up'
>                     "table-name": "main",
>                         # Empty if no name attached,
>                     "table-id": 254,
>                         # If not defined, use 'main' route table id
>                     "protocol": "dhcp",     # "static" or "dhcp"
>                         # If not defined, use 'static'
>                     "metric": 100,
>                         # If not defined, let NetworkManager to
> decided.
>                     "destination": "0.0.0.0/0",
>                         # Mandatory
>                     "next-hop-iface": "eth0",
>                         # Mandatory
>                     "next-hop-address": "192.0.2.1"
>                         # ^ Empty on point-to-point link
>                 },
>             ],
>             "ipv6": [    # Sorted with 'table-id' then 'destination'
>                 {
>                     "status": "up",
>                     "table-name": "main",
>                     "table-id": 254,
>                     "protocol": "router-advertisement",
>                     # ^ "static" or "router-advertisement"
>                     "metric": 100,
>                     "destination": "::/0",
>                     "next-hop-iface": "eth0",
>                     "next-hop-address": "fe80::1"
>                 },
>             ],
>         }
>     }
> ```
> 
> Changes since V1:
> 
>  * Top tree is 'routes', and subtree is 'ipv4' and 'ipv6'.
>    Even the IPv4 and IPv6 route entry are mostly identical, but we
> need
>    schema to differentiate the 'destination' address type in a simple
>    way.

Hi,

I don't think there is any fundamental difference between

  {
    ipv4-routes: { ... },
    ipv6-routes: { ... },
  }

and

  {
    routes: {
      ipv4: { ... },
      ipv6: { ... },
    },
  }


Instead, the more fundamntal question is whether IPv4 and IPv6 routes
should be merged together and expressed by the same "object"/"type",
and get a "addr-family" field to differenciate.

  {
    routes: {
      [0] = {
        addr-family: ipv4,
        ...
      },
      ...
    },
  } 

I think the answer is "yes". It seems better to me to treat routes the
same on a higher layer, and move the differenciation between address
families closer the places that care about the difference.




>  * Add 'status: absent' to simplify the route deletion.
> 
>  * Add comments to show the default value if not defined.

"protocol" possibly should still be renamed to "source". Or "origin"?


best,
Thomas

Attachment: signature.asc
Description: This is a digitally signed message part

_______________________________________________
networkmanager-list mailing list
networkmanager-list@gnome.org
https://mail.gnome.org/mailman/listinfo/networkmanager-list

Reply via email to