Subject: [alto] Review of draft-randriamasy-alto-cost-context-01

From: Dawn Chan <[email-masked]>
Date: Wed, 28 Jun 2017 14:17:52 +0000

Hi Sabine and all,

After reviewing cost context, I think a possible solution to introduce cost context is to extend the existing specification of CostType. Below is my proposal.

The CostType defined in [RFC7285] is:

object CostType {
	CostMetric cost-metric;
	CostMode cost-mode;
	[JSONString description;]
}

Since cost-context is used to describe the different parameters for one metric, so I propose to extend CostType as follows:

object CostType {
	CostMetric cost-metric;
	CostMode cost-mode;
	[CostContext cost-context<1..*>;]
	[JSONString description;]
}

The definition of CostContext can be done later. Each cost-context may be like ["uda", "uplink"] which describe a specific metric context.

So, the IRD may be:

{
  "meta" : {
    "cost-type" : {
      "num-routingcost": {
        "cost-mode": "numerical",
        "cost-metric" : "routingcost"
      },
      "num-RFcost" : {
        "cost-mode" : "numerical",
        "cost-metric" : "RFcost"
        "cost-context" : [["uda", "uplink"],
                          ["uda", "downlink"],
                          ["udna", "uplink"],
                          ["udna", "downlink"]]
      }
    }
  }
  "resources" : {
    ...An endpointcost resource which supports multi-cost and cost-calendar...
    "calendared-endpointcost-map" : {
      "uri": "http://alto.local.example.com/endpointcostmap//lookup/context",
      "media-types" : [ "application/alto-endpointcost+json" ],
      "accepts" : [ "application/alto-endpointcostparams+json" ],
      "capabilities" : {
        "cost-type-names" : [ "num-routingcost",
                              "num-RFcost" ],
        "calendar-attributes" : [
          { "cost-type-names" : "num-routingcost",
            "time-interval-size" : "1 hour",
            "number-of-intervals" : 24 },
          { "cost-type-names" : "num-RFcost",
            "time-interval-size" : "5 minute",
            "number-of-intervals" : 12 }
        ]
      }
    }
  }
}

A possible query and response would be like:

POST /endpointcost/lookup/context HTTP/1.1
Host: alto.local.example.com
Content-Length: [TODO]
Content-Type: application/alto-endpointcostparams+json
Accept: application/alto-endpointcost+json,application/alto-error+json
{
  "cost-type" : {},
  "multi-cost-types" : [ { "cost-mode" : "numerical", "cost-metric" : "routingcost" },
                          { "cost-mode" : "numerical", "cost-metric" : "RFcsot", "cost-context" : [ [ "uda", "uplink" ],[ "uda", "downlink” ] ] }
  ]
  "endpoints" : {
    "srcs": [ "ipv4:192.0.2.2" ],
    "dsts": [ "ipv4:192.0.2.89",
              "ipv6:2000::1:2345:6789:abcd"]
  }
}

HTTP/1.1 200 OK
Content-Length: [TODO]
Content-Type: application/alto-endpointcost+json
{
  "meta" : {
    "multi-cost-types" : [
      { "cost-mode" : "numerical", "cost-metric" : "routingcost" },
      { "cost-mode" : "numerical", "cost-metric" : "RFcsot", "cost-context" : [[ "uda", "uplink" ],[ "uda", "downlink" ]]
      // Here, suppose only the contextual parameters ["uda", "uplink"] and ["uda", "downlink"] are needed.
      }
    ],
    "calendar-response-attributes" : [
      { "cost-type-name : num-routingcost"
        "calendar-start-time" : Mon, 30 Jun 2014 00:00:00 GMT,
        "time-interval-size" : "1 hour",
        "numb-intervals" : 24,
      },
      { "cost-type-name : num-latency"
        "calendar-start-time" : Tue, 1 Jul 2014 13:00:00 GMT,
        "time-interval-size" : "5 minute",
        "numb-intervals" : 12
      }
    ],
  } // end meta
  "endpoint-cost-map" : {
  "ipv4:192.0.2.2": {
    "ipv4:192.0.2.89"    : [ [r1, r2, ... r24], [ [l1-uda-uplink,l1-uda-downlink], [l2-uda-uplink,l2-uda-downlink], ... [l12-uda-uplink,l12-uda-downlink] ] ],
    "ipv6:2000::1:2345:6789:abcd" : [ [r1, r2, ... r24], [ [l1-uda-uplink,l1-uda-downlink], [l2-uda-uplink,l2-uda-downlink], ... [l12-uda-uplink,l12-uda-downlink] ] ]
} }
}

Here we may change the knowledge of cost value. Each cost value represented a combination of a cost-mode and a cost-metric as defined in RFC7285, but now, each cost value may represent a combination of a cost-mode, a cost-metric and a specific cost-context value.

Such design idea seems to be compatible with multi-cost and cost-calendar.

What do you think of this idea? Wish to hear your reply.

Best Regards,
Dawn