UE 信息查询实现

需求

通过 MP2 接口输入 过滤的type 和具体数据进行 UE 的信息查询

具体方法:https://{ip}:{port}/mp2/v1/meps/{mepId}/ueinformation/query/ue_id?type={ueIdType}&value={ueIdValue}

需要解析 type 和 value 的值

UPF API

通过 upf.api 进行生成的 upf.ba.go

type UpfUeInformation struct {
	UeidType  string `binapi:"string[32],name=ueid_type" json:"ueid_type,omitempty"`
	UeidValue string `binapi:"string[32],name=ueid_value" json:"ueid_value,omitempty"`
}

北向 Restful

/plugins/vpp/upfplugin/rest_api.go

func (p *UpfPlugin) registerHandlers(http rest.HTTPHandlers) {
        http.RegisterHTTPHandler(mp2 + ueInfo, p.mp2GetUeInfoHandler, "GET")
}

通过 args := req.URL.Query() 获取到具体参数,然后通过

    entry := &models.UpfUeInformation{
        UeidType: []byte(ueIdType),
        UeidValue: []byte(ueIdValue),
    }

组装具体请求结构体,进行请求,返回 ueInfo

ueInfo, err := p.upfHandler.VppGetUeInfo(entry)


err = h.callsChannel.SendRequest(request).ReceiveReply(reply)

解析 reply 返回结果

返回结果

如果查询不到,返回对应查询错误,例如:

"500 Internal server error: sending request failed: VppGetUeInfo error MP2VPPApiError: Session Lookup Error (-9)\n"

如果查询到,则返回 200 和 正确结果

# curl -X GET "http://127.0.0.1:9191/mp2/v1/meps/123/ueinformation/query/ue_id?type=ipaddress&value=172.20.231.1"
{
  "address": "172.20.231.1",
  "supi": "466920100001101"
}