diff --git a/compile_protos.sh b/compile_protos.sh index dee10d7..986c9a5 100755 --- a/compile_protos.sh +++ b/compile_protos.sh @@ -31,4 +31,4 @@ curl --create-dirs -o proto/build_deps/github.com/grpc/grpc-proto/grpc/binlog/v1 protoc -I=".:./proto/build_deps" --go_out=. --go_opt=paths=source_relative proto/log/log.proto -rm -rf proto/build_deps \ No newline at end of file +rm -rf proto/build_deps diff --git a/go.mod b/go.mod index 5957609..2ffce7b 100644 --- a/go.mod +++ b/go.mod @@ -10,6 +10,8 @@ require ( github.com/openconfig/gribi v1.0.0 github.com/openconfig/gribigo v0.0.0-20230918211521-0717f4c7cd92 github.com/openconfig/ygot v0.29.11 + github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e + golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b google.golang.org/grpc v1.58.2 google.golang.org/protobuf v1.31.0 ) @@ -19,7 +21,6 @@ require ( github.com/google/uuid v1.3.0 // indirect github.com/openconfig/goyang v1.4.1 // indirect go.uber.org/atomic v1.10.0 // indirect - golang.org/x/exp v0.0.0-20230801115018-d63ba01acd4b // indirect golang.org/x/net v0.14.0 // indirect golang.org/x/sys v0.11.0 // indirect golang.org/x/text v0.12.0 // indirect diff --git a/go.sum b/go.sum index 58b9104..1626c21 100644 --- a/go.sum +++ b/go.sum @@ -31,6 +31,7 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= @@ -41,6 +42,7 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -85,6 +87,7 @@ github.com/openconfig/ygot v0.13.2/go.mod h1:kJN0yCXIH07dOXvNBEFm3XxXdnDD5NI6K99 github.com/openconfig/ygot v0.29.11 h1:M5lWoan2OL3JGmb5J8O9dMP+CVk2CarNa9fVQSmbucA= github.com/openconfig/ygot v0.29.11/go.mod h1:RNnn1ytQ8GZV5LPts36l0cyoRjsYYpruiruJEvmU2sg= github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e h1:AfZKoikDXbZ7zWvO/lvCRzLo7i6lM+gNleYVMxPiWyQ= +github.com/p4lang/p4runtime v1.4.0-rc.5.0.20220728214547-13f0d02a521e/go.mod h1:m9laObIMXM9N1ElGXijc66/MSM5eheZJLRLxg/TG+fU= github.com/pborman/getopt v0.0.0-20190409184431-ee0cd42419d3/go.mod h1:85jBQOZwpVEaDAr341tbn15RS4fCAsIst0qp7i8ex1o= github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -135,6 +138,7 @@ golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM= @@ -151,6 +155,7 @@ golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3 golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= @@ -165,6 +170,7 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= +google.golang.org/grpc v1.28.1/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= google.golang.org/grpc v1.58.2 h1:SXUpjxeVF3FKrTYQI4f4KvbGD5u2xccdYdurwowix5I= diff --git a/replayer.go b/replayer.go index c1dc1cd..94b2c51 100644 --- a/replayer.go +++ b/replayer.go @@ -21,7 +21,6 @@ import ( "errors" "fmt" "os" - "slices" "sort" "strings" "time" @@ -32,6 +31,7 @@ import ( "github.com/openconfig/gribigo/client" "github.com/openconfig/ygot/util" "github.com/openconfig/ygot/ygot" + "golang.org/x/exp/slices" "google.golang.org/protobuf/encoding/prototext" "google.golang.org/protobuf/proto" "google.golang.org/protobuf/testing/protocmp" @@ -39,6 +39,7 @@ import ( gnmipb "github.com/openconfig/gnmi/proto/gnmi" gribipb "github.com/openconfig/gribi/v1/proto/service" lpb "github.com/openconfig/replayer/proto/log" + p4pb "github.com/p4lang/p4runtime/go/p4/v1" ) //go:generate ./compile_protos.sh @@ -257,30 +258,26 @@ func Parse(path string) (*Recording, error) { switch v := m.(type) { case *gnmipb.GetResponse: - counts["gNMI GetResponse"]++ if r.snapshot.gnmiGet == nil { r.snapshot.gnmiGet = v } case *gribipb.GetResponse: - counts["gRIBI GetResponse"]++ if r.snapshot.gribi == nil { r.snapshot.gribi = v } r.finalGRIBI = v case *gnmipb.SetRequest: - counts["gNMI SetRequest"]++ if r.snapshot.gnmiSet == nil { r.snapshot.gnmiSet = v } else { r.events = append(r.events, &event{message: v, timestamp: timestamp}) } - case *gribipb.ModifyRequest: - counts["gRIBI ModifyRequest"]++ + case *gribipb.ModifyRequest, *p4pb.PacketOut, *p4pb.WriteRequest: r.events = append(r.events, &event{message: v, timestamp: timestamp}) default: - counts["unsupported"]++ log.Errorf("Unsupported message type: %T, %v", v, v) } + counts[fmt.Sprintf("%T", m)]++ } log.Infof("Parsed binary log with request counts:\n%v", pretty.Sprint(counts)) @@ -334,6 +331,8 @@ func unmarshal(data []byte) (proto.Message, error) { new(gnmipb.SubscribeResponse), new(gribipb.GetResponse), new(gribipb.ModifyRequest), + new(p4pb.PacketOut), + new(p4pb.WriteRequest), } for _, m := range messages { diff --git a/replayer_test.go b/replayer_test.go index ef4a2c5..239a4dd 100644 --- a/replayer_test.go +++ b/replayer_test.go @@ -38,6 +38,7 @@ import ( gnmipb "github.com/openconfig/gnmi/proto/gnmi" gribipb "github.com/openconfig/gribi/v1/proto/service" + p4pb "github.com/p4lang/p4runtime/go/p4/v1" ) const ( @@ -129,6 +130,25 @@ func TestParse(t *testing.T) { }, timestamp: time.Unix(7, 0), }, + { + message: &p4pb.WriteRequest{ + DeviceId: 1234, + Role: "test_role", + }, + timestamp: time.Unix(9, 0), + }, + { + message: &p4pb.PacketOut{ + Payload: []byte("test payload"), + Metadata: []*p4pb.PacketMetadata{ + { + MetadataId: 321, + Value: []byte("abc"), + }, + }, + }, + timestamp: time.Unix(10, 0), + }, }, finalGRIBI: &gribipb.GetResponse{ Entry: []*gribipb.AFTEntry{ diff --git a/testdata/parse_invalid_message.pb b/testdata/parse_invalid_message.pb index 2d38518..28b9fad 100755 --- a/testdata/parse_invalid_message.pb +++ b/testdata/parse_invalid_message.pb @@ -4,6 +4,6 @@  DEFAULT" prefix1šáÔè* - -B - \ No newline at end of file + +B +È{ \ No newline at end of file diff --git a/testdata/parse_success.pb b/testdata/parse_success.pb index 48885e1..6552c57 100755 --- a/testdata/parse_success.pb +++ b/testdata/parse_success.pb @@ -29,4 +29,10 @@ B&$ " DEFAULT" - final statešáÔè+ \ No newline at end of file + final statešáÔè+ + + BÒ 2 test_role + + +B + test payloadÁabc \ No newline at end of file