P4C
The P4 Compiler
 
Loading...
Searching...
No Matches
p4RuntimeSerializer.h
1/*
2Copyright 2013-present Barefoot Networks, Inc.
3
4Licensed under the Apache License, Version 2.0 (the "License");
5you may not use this file except in compliance with the License.
6You may obtain a copy of the License at
7
8 http://www.apache.org/licenses/LICENSE-2.0
9
10Unless required by applicable law or agreed to in writing, software
11distributed under the License is distributed on an "AS IS" BASIS,
12WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13See the License for the specific language governing permissions and
14limitations under the License.
15*/
16
17#ifndef CONTROL_PLANE_P4RUNTIMESERIALIZER_H_
18#define CONTROL_PLANE_P4RUNTIMESERIALIZER_H_
19
20#pragma GCC diagnostic push
21#pragma GCC diagnostic ignored "-Wunused-parameter"
22#pragma GCC diagnostic ignored "-Wpedantic"
23#include <google/protobuf/util/json_util.h>
24#pragma GCC diagnostic pop
25
26#include <iosfwd>
27#include <unordered_map>
28
29#include "lib/cstring.h"
30#include "p4RuntimeTypes.h"
31
32namespace p4 {
33namespace config {
34namespace v1 {
35class P4Info;
36} // namespace v1
37} // namespace config
38namespace v1 {
39class WriteRequest;
40} // namespace v1
41} // namespace p4
42
43namespace IR {
44class P4Program;
45} // namespace IR
46
47class CompilerOptions;
48
49namespace P4 {
50
56 void serializeP4InfoTo(std::ostream *destination, P4RuntimeFormat format) const;
59 void serializeEntriesTo(std::ostream *destination, P4RuntimeFormat format) const;
60
63 const ::p4::config::v1::P4Info *p4Info;
66 const ::p4::v1::WriteRequest *entries;
67
68 // Print options to use while outputting JSON.
69 google::protobuf::util::JsonPrintOptions jsonPrintOptions;
70
71 P4RuntimeAPI(const ::p4::config::v1::P4Info *p4Info, const ::p4::v1::WriteRequest *entries)
73 jsonPrintOptions.add_whitespace = true;
74 }
75
76 P4RuntimeAPI(const ::p4::config::v1::P4Info *p4Info, const ::p4::v1::WriteRequest *entries,
77 google::protobuf::util::JsonPrintOptions jsonPrintOptions)
78 : p4Info(p4Info), entries(entries), jsonPrintOptions(jsonPrintOptions) {}
79};
80
81namespace ControlPlaneAPI {
82struct P4RuntimeArchHandlerBuilderIface;
83} // namespace ControlPlaneAPI
84
87 public:
88 static P4RuntimeSerializer *get();
89
90 void registerArch(const cstring archName,
92
105 P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch);
106
116 void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options);
117
126 void serializeP4RuntimeIfRequired(const P4RuntimeAPI &p4Runtime,
127 const CompilerOptions &options);
128
131 static cstring resolveArch(const CompilerOptions &options);
132
133 private:
135
136 std::unordered_map<cstring, const ControlPlaneAPI::P4RuntimeArchHandlerBuilderIface *>
137 archHandlerBuilders{};
138};
139
142P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch = "v1model");
143
146void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options);
147
148} // namespace P4
149
150#endif /* CONTROL_PLANE_P4RUNTIMESERIALIZER_H_ */
Definition options.h:26
Public APIs to generate P4Info message. Uses the singleton pattern.
Definition p4RuntimeSerializer.h:86
Definition cstring.h:72
static cstring resolveArch(const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1612
void serializeP4InfoTo(std::ostream *destination, P4RuntimeFormat format) const
Definition p4RuntimeSerializer.cpp:1452
P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch)
Definition p4RuntimeSerializer.cpp:1627
void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1534
P4RuntimeAPI generateP4Runtime(const IR::P4Program *program, cstring arch)
Definition p4RuntimeSerializer.cpp:1416
void serializeP4RuntimeIfRequired(const IR::P4Program *program, const CompilerOptions &options)
Definition p4RuntimeSerializer.cpp:1631
void serializeEntriesTo(std::ostream *destination, P4RuntimeFormat format) const
Definition p4RuntimeSerializer.cpp:1472
Definition applyOptionsPragmas.cpp:24
P4RuntimeFormat
P4Runtime serialization formats.
Definition p4RuntimeTypes.h:23
Definition p4RuntimeArchHandler.h:201
Definition p4RuntimeSerializer.h:53
const ::p4::config::v1::P4Info * p4Info
Definition p4RuntimeSerializer.h:63
const ::p4::v1::WriteRequest * entries
Definition p4RuntimeSerializer.h:66