Skip to content

Commit e0dd136

Browse files
author
Chris Dodd
committed
Don't move checksum operations into an action.
1 parent 83bdc8e commit e0dd136

19 files changed

+69
-171
lines changed

backends/bmv2/jsonconverter.cpp

+3-3
Original file line numberDiff line numberDiff line change
@@ -1887,9 +1887,9 @@ void JsonConverter::generateUpdate(const IR::P4Control* updateControl,
18871887
}
18881888
}
18891889
}
1890-
} else if (auto apply = stat->to<IR::MethodCallStatement>()) {
1891-
BUG_CHECK(apply->methodCall->method->to<IR::Member>()->member == "apply",
1892-
"Call of something other than an apply method");
1890+
} else if (auto mc = stat->to<IR::MethodCallStatement>()) {
1891+
auto mi = P4::MethodInstance::resolve(mc->methodCall, refMap, typeMap, true);
1892+
BUG_CHECK(mi && mi->isApply(), "Call of something other than an apply method");
18931893
// FIXME -- ignore for now
18941894
continue;
18951895
}

midend/actionSynthesis.cpp

+21-5
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ limitations under the License.
1717
#include "actionSynthesis.h"
1818
#include "frontends/p4/methodInstance.h"
1919
#include "frontends/p4/coreLibrary.h"
20+
#include "frontends/p4/fromv1.0/v1model.h"
2021

2122
namespace P4 {
2223

@@ -111,14 +112,27 @@ bool DoSynthesizeActions::mustMove(const IR::MethodCallStatement* statement) {
111112
if (!mi->is<ExternMethod>())
112113
return true;
113114
auto em = mi->to<ExternMethod>();
114-
auto corelib = P4::P4CoreLibrary::instance;
115+
auto &corelib = P4::P4CoreLibrary::instance;
115116
if (em->originalExternType->name.name == corelib.packetOut.name &&
116117
em->method->name.name == corelib.packetOut.emit.name)
117118
return false;
118119
}
119120
return true;
120121
}
121122

123+
bool DoSynthesizeActions::mustMove(const IR::AssignmentStatement *assign) {
124+
if (auto mc = assign->right->to<IR::MethodCallExpression>()) {
125+
auto mi = MethodInstance::resolve(mc, refMap, typeMap);
126+
if (!mi->is<ExternMethod>())
127+
return true;
128+
auto em = mi->to<ExternMethod>();
129+
auto &v1model = P4V1::V1Model::instance;
130+
if (em->originalExternType->name.name == v1model.ck16.name)
131+
return false;
132+
}
133+
return true;
134+
}
135+
122136
const IR::Node* DoSynthesizeActions::postorder(IR::P4Control* control) {
123137
if (actions.empty())
124138
return control;
@@ -138,8 +152,9 @@ const IR::Node* DoSynthesizeActions::preorder(IR::BlockStatement* statement) {
138152

139153
for (auto c : *statement->components) {
140154
if (c->is<IR::AssignmentStatement>()) {
141-
actbody->push_back(c);
142-
continue;
155+
if (mustMove(c->to<IR::AssignmentStatement>())) {
156+
actbody->push_back(c);
157+
continue; }
143158
} else if (c->is<IR::MethodCallStatement>()) {
144159
if (mustMove(c->to<IR::MethodCallStatement>())) {
145160
actbody->push_back(c);
@@ -200,7 +215,9 @@ const IR::Statement* DoSynthesizeActions::createAction(const IR::Statement* toAd
200215
}
201216

202217
const IR::Node* DoSynthesizeActions::preorder(IR::AssignmentStatement* statement) {
203-
return createAction(statement);
218+
if (mustMove(statement))
219+
return createAction(statement);
220+
return statement;
204221
}
205222

206223
const IR::Node* DoSynthesizeActions::preorder(IR::MethodCallStatement* statement) {
@@ -209,5 +226,4 @@ const IR::Node* DoSynthesizeActions::preorder(IR::MethodCallStatement* statement
209226
return statement;
210227
}
211228

212-
213229
} // namespace P4

midend/actionSynthesis.h

+2-1
Original file line numberDiff line numberDiff line change
@@ -71,12 +71,13 @@ class DoSynthesizeActions : public Transform {
7171
ReferenceMap* refMap;
7272
TypeMap* typeMap;
7373
std::vector<const IR::P4Action*> actions; // inserted actions
74-
bool moveEmits = false;
74+
bool moveEmits = false; // FIXME -- always false, remove it?
7575
bool changes = false;
7676

7777
public:
7878
// If true the statement must be moved to an action
7979
bool mustMove(const IR::MethodCallStatement* statement);
80+
bool mustMove(const IR::AssignmentStatement* statement);
8081

8182
// If moveEmits is true, move emit statements to actions, else
8283
// leave them in control blocks.

testdata/p4_14_samples_outputs/basic_routing-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -218,17 +218,8 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
218218

219219
control computeChecksum(inout headers hdr, inout metadata meta) {
220220
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
221-
action act_0() {
222-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
223-
}
224-
table tbl_act_0() {
225-
actions = {
226-
act_0();
227-
}
228-
const default_action = act_0();
229-
}
230221
apply {
231-
tbl_act_0.apply();
222+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
232223
}
233224
}
234225

testdata/p4_14_samples_outputs/checksum-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -90,18 +90,9 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
9090

9191
control computeChecksum(inout headers hdr, inout metadata meta) {
9292
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
93-
action act_0() {
94-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
95-
}
96-
table tbl_act_0() {
97-
actions = {
98-
act_0();
99-
}
100-
const default_action = act_0();
101-
}
10293
apply {
10394
if (hdr.ipv4.ihl == 4w5)
104-
tbl_act_0.apply();
95+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
10596
}
10697
}
10798

testdata/p4_14_samples_outputs/checksum1-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -139,17 +139,8 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
139139

140140
control computeChecksum(inout headers hdr, inout metadata meta) {
141141
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
142-
action act_0() {
143-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
144-
}
145-
table tbl_act_0() {
146-
actions = {
147-
act_0();
148-
}
149-
const default_action = act_0();
150-
}
151142
apply {
152-
tbl_act_0.apply();
143+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
153144
}
154145
}
155146

testdata/p4_14_samples_outputs/flowlet_switching-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -250,17 +250,8 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
250250

251251
control computeChecksum(inout headers hdr, inout metadata meta) {
252252
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
253-
action act_0() {
254-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
255-
}
256-
table tbl_act_0() {
257-
actions = {
258-
act_0();
259-
}
260-
const default_action = act_0();
261-
}
262253
apply {
263-
tbl_act_0.apply();
254+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
264255
}
265256
}
266257

testdata/p4_14_samples_outputs/parser_dc_full-midend.p4

+2-20
Original file line numberDiff line numberDiff line change
@@ -711,29 +711,11 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
711711
control computeChecksum(inout headers hdr, inout metadata meta) {
712712
@name("inner_ipv4_checksum") Checksum16() inner_ipv4_checksum_2;
713713
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
714-
action act_1() {
715-
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
716-
}
717-
action act_2() {
718-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
719-
}
720-
table tbl_act_1() {
721-
actions = {
722-
act_1();
723-
}
724-
const default_action = act_1();
725-
}
726-
table tbl_act_2() {
727-
actions = {
728-
act_2();
729-
}
730-
const default_action = act_2();
731-
}
732714
apply {
733715
if (hdr.ipv4.isValid())
734-
tbl_act_1.apply();
716+
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
735717
if (hdr.ipv4.ihl == 4w5)
736-
tbl_act_2.apply();
718+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
737719
}
738720
}
739721

testdata/p4_14_samples_outputs/port_vlan_mapping-midend.p4

+2-20
Original file line numberDiff line numberDiff line change
@@ -932,29 +932,11 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
932932
control computeChecksum(inout headers hdr, inout metadata meta) {
933933
@name("inner_ipv4_checksum") Checksum16() inner_ipv4_checksum_2;
934934
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
935-
action act_1() {
936-
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
937-
}
938-
action act_2() {
939-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
940-
}
941-
table tbl_act_1() {
942-
actions = {
943-
act_1();
944-
}
945-
const default_action = act_1();
946-
}
947-
table tbl_act_2() {
948-
actions = {
949-
act_2();
950-
}
951-
const default_action = act_2();
952-
}
953935
apply {
954936
if (hdr.ipv4.isValid())
955-
tbl_act_1.apply();
937+
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
956938
if (hdr.ipv4.ihl == 4w5)
957-
tbl_act_2.apply();
939+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
958940
}
959941
}
960942

testdata/p4_14_samples_outputs/sai_p4-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -380,18 +380,9 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
380380

381381
control computeChecksum(inout headers hdr, inout metadata meta) {
382382
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
383-
action act_0() {
384-
hdr.ipv4.checksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.ipv4_length, hdr.ipv4.id, hdr.ipv4.flags, hdr.ipv4.offset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
385-
}
386-
table tbl_act_0() {
387-
actions = {
388-
act_0();
389-
}
390-
const default_action = act_0();
391-
}
392383
apply {
393384
if (hdr.ipv4.ihl == 4w5)
394-
tbl_act_0.apply();
385+
hdr.ipv4.checksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.ipv4_length, hdr.ipv4.id, hdr.ipv4.flags, hdr.ipv4.offset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
395386
}
396387
}
397388

testdata/p4_14_samples_outputs/simple_nat-midend.p4

+2-20
Original file line numberDiff line numberDiff line change
@@ -331,28 +331,10 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
331331
control computeChecksum(inout headers hdr, inout metadata meta) {
332332
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
333333
@name("tcp_checksum") Checksum16() tcp_checksum_2;
334-
action act_1() {
335-
hdr.tcp.checksum = tcp_checksum_2.get<tuple<bit<32>, bit<32>, bit<8>, bit<8>, bit<16>, bit<16>, bit<16>, bit<32>, bit<32>, bit<4>, bit<4>, bit<8>, bit<16>, bit<16>>>({ hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, 8w0, hdr.ipv4.protocol, meta.meta.tcpLength, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.tcp.seqNo, hdr.tcp.ackNo, hdr.tcp.dataOffset, hdr.tcp.res, hdr.tcp.flags, hdr.tcp.window, hdr.tcp.urgentPtr });
336-
}
337-
action act_2() {
338-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
339-
}
340-
table tbl_act_1() {
341-
actions = {
342-
act_2();
343-
}
344-
const default_action = act_2();
345-
}
346-
table tbl_act_2() {
347-
actions = {
348-
act_1();
349-
}
350-
const default_action = act_1();
351-
}
352334
apply {
353-
tbl_act_1.apply();
335+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
354336
if (hdr.tcp.isValid())
355-
tbl_act_2.apply();
337+
hdr.tcp.checksum = tcp_checksum_2.get<tuple<bit<32>, bit<32>, bit<8>, bit<8>, bit<16>, bit<16>, bit<16>, bit<32>, bit<32>, bit<4>, bit<4>, bit<8>, bit<16>, bit<16>>>({ hdr.ipv4.srcAddr, hdr.ipv4.dstAddr, 8w0, hdr.ipv4.protocol, meta.meta.tcpLength, hdr.tcp.srcPort, hdr.tcp.dstPort, hdr.tcp.seqNo, hdr.tcp.ackNo, hdr.tcp.dataOffset, hdr.tcp.res, hdr.tcp.flags, hdr.tcp.window, hdr.tcp.urgentPtr });
356338
}
357339
}
358340

testdata/p4_14_samples_outputs/simple_router-midend.p4

+1-10
Original file line numberDiff line numberDiff line change
@@ -158,17 +158,8 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
158158

159159
control computeChecksum(inout headers hdr, inout metadata meta) {
160160
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
161-
action act_0() {
162-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
163-
}
164-
table tbl_act_0() {
165-
actions = {
166-
act_0();
167-
}
168-
const default_action = act_0();
169-
}
170161
apply {
171-
tbl_act_0.apply();
162+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
172163
}
173164
}
174165

testdata/p4_14_samples_outputs/switch_20160226/switch-midend.p4

+2-20
Original file line numberDiff line numberDiff line change
@@ -6102,29 +6102,11 @@ control verifyChecksum(in headers hdr, inout metadata meta) {
61026102
control computeChecksum(inout headers hdr, inout metadata meta) {
61036103
@name("inner_ipv4_checksum") Checksum16() inner_ipv4_checksum_2;
61046104
@name("ipv4_checksum") Checksum16() ipv4_checksum_2;
6105-
action act_78() {
6106-
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
6107-
}
6108-
action act_79() {
6109-
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
6110-
}
6111-
table tbl_act_78() {
6112-
actions = {
6113-
act_78();
6114-
}
6115-
const default_action = act_78();
6116-
}
6117-
table tbl_act_79() {
6118-
actions = {
6119-
act_79();
6120-
}
6121-
const default_action = act_79();
6122-
}
61236105
apply {
61246106
if (hdr.inner_ipv4.ihl == 4w5)
6125-
tbl_act_78.apply();
6107+
hdr.inner_ipv4.hdrChecksum = inner_ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.inner_ipv4.version, hdr.inner_ipv4.ihl, hdr.inner_ipv4.diffserv, hdr.inner_ipv4.totalLen, hdr.inner_ipv4.identification, hdr.inner_ipv4.flags, hdr.inner_ipv4.fragOffset, hdr.inner_ipv4.ttl, hdr.inner_ipv4.protocol, hdr.inner_ipv4.srcAddr, hdr.inner_ipv4.dstAddr });
61266108
if (hdr.ipv4.ihl == 4w5)
6127-
tbl_act_79.apply();
6109+
hdr.ipv4.hdrChecksum = ipv4_checksum_2.get<tuple<bit<4>, bit<4>, bit<8>, bit<16>, bit<16>, bit<3>, bit<13>, bit<8>, bit<8>, bit<32>, bit<32>>>({ hdr.ipv4.version, hdr.ipv4.ihl, hdr.ipv4.diffserv, hdr.ipv4.totalLen, hdr.ipv4.identification, hdr.ipv4.flags, hdr.ipv4.fragOffset, hdr.ipv4.ttl, hdr.ipv4.protocol, hdr.ipv4.srcAddr, hdr.ipv4.dstAddr });
61286110
}
61296111
}
61306112

0 commit comments

Comments
 (0)