diff --git a/gnmi_set/gnmi_set.go b/gnmi_set/gnmi_set.go index c5af9972..6b20f42f 100644 --- a/gnmi_set/gnmi_set.go +++ b/gnmi_set/gnmi_set.go @@ -59,11 +59,11 @@ var ( func buildPbUpdateList(pathValuePairs []string) []*pb.Update { var pbUpdateList []*pb.Update for _, item := range pathValuePairs { - pathValuePair := strings.SplitN(item, ":", 2) - // TODO (leguo): check if any path attribute contains ':' - if len(pathValuePair) != 2 || len(pathValuePair[1]) == 0 { + splitIndex := strings.LastIndexAny(item, ":") + if splitIndex < 1 { log.Exitf("invalid path-value pair: %v", item) } + pathValuePair := []string{item[:splitIndex], item[(splitIndex + 1):]} pbPath, err := xpath.ToGNMIPath(pathValuePair[0]) if err != nil { log.Exitf("error in parsing xpath %q to gnmi path", pathValuePair[0]) diff --git a/utils/xpath/path.go b/utils/xpath/path.go index 57f05384..ebcee168 100644 --- a/utils/xpath/path.go +++ b/utils/xpath/path.go @@ -18,6 +18,7 @@ package xpath import ( "fmt" + "strings" pb "github.com/openconfig/gnmi/proto/gnmi" ) @@ -40,6 +41,12 @@ import ( // elem: // elem: func ToGNMIPath(xpath string) (*pb.Path, error) { + var origin string + i := strings.Index(xpath, ":") + if i != -1 { + origin = xpath[:i] + xpath = xpath[i+1:] + } xpathElements, err := ParseStringPath(xpath) if err != nil { return nil, err @@ -62,5 +69,5 @@ func ToGNMIPath(xpath string) (*pb.Path, error) { return nil, fmt.Errorf("wrong data type: %T", v) } } - return &pb.Path{Elem: pbPathElements}, nil + return &pb.Path{Origin: origin, Elem: pbPathElements}, nil }