{
  "name": "interface-state",
  "description": "Interface state and traffic counters, normalized across vendors. One model, one set of field names; per-vendor mappings translate each platform's data shape (OpenConfig on Arista cEOS, native srl_nokia on Nokia SR Linux) into the same fields.",
  "version": "1.0.0",
  "fields": [
    {"name": "interface-name", "field-type": "string", "required": true,  "description": "Interface name (key)",            "position": 0},
    {"name": "admin-status",   "field-type": "string", "required": false, "description": "Administrative status (up/down)", "position": 1},
    {"name": "oper-status",    "field-type": "string", "required": false, "description": "Operational status (up/down)",    "position": 2},
    {"name": "mtu",            "field-type": "uint32", "required": false, "description": "MTU in bytes",                     "position": 3},
    {"name": "in-octets",      "field-type": "uint64", "required": false, "description": "Ingress byte counter",            "position": 4},
    {"name": "out-octets",     "field-type": "uint64", "required": false, "description": "Egress byte counter",             "position": 5},
    {"name": "in-errors",      "field-type": "uint64", "required": false, "description": "Ingress error counter",           "position": 6},
    {"name": "out-errors",     "field-type": "uint64", "required": false, "description": "Egress error counter",            "position": 7}
  ],
  "mappings": [
    {
      "protocol": "gnmi",
      "netos": "srlinux",
      "key-field": "name",
      "gnmi-paths": [
        "/interface/admin-state",
        "/interface/oper-state",
        "/interface/mtu",
        "/interface/statistics"
      ],
      "field-mappings": {
        "name":              "interface-name",
        "admin-state":       "admin-status",
        "oper-state":        "oper-status",
        "mtu":               "mtu",
        "in-octets":         "in-octets",
        "out-octets":        "out-octets",
        "in-error-packets":  "in-errors",
        "out-error-packets": "out-errors"
      },
      "value-transforms": {
        "admin-status": {"enable": "up", "disable": "down"},
        "oper-status":  {"up": "up", "down": "down"}
      }
    },
    {
      "protocol": "gnmi",
      "netos": "eos",
      "key-field": "name",
      "gnmi-paths": ["/interfaces/interface/state"],
      "field-mappings": {
        "name":         "interface-name",
        "admin-status": "admin-status",
        "oper-status":  "oper-status",
        "mtu":          "mtu",
        "in-octets":    "in-octets",
        "out-octets":   "out-octets",
        "in-errors":    "in-errors",
        "out-errors":   "out-errors"
      },
      "field-transforms": {
        "admin-status": ["lowercase"],
        "oper-status":  ["lowercase"]
      }
    }
  ]
}
