p4-dev@lists.p4.org

list for questions/discussion of p4 programs and tools

View all threads

Question over re-circulation feature in P4 BMv2 switch

SG
Sahil Gupta
Fri, Dec 4, 2020 4:49 AM

Hi all,

I am writing a program to recirculate the packet in the pipeline.
When I am using "recirculate(meta.resubmit_meta);" in the action method, it
is showing a warning (Message 1 below) that recirculates with a non-empty
argument not supported. When I am using "recirculate()" in the action
method without an argument then it requires some argument.

What is an appropriate way to recirculate it from egress to ingress with
the modification done in-between? Any good implementation of recirculation
for v1.model is there?

Also if I remove the "packet.emit(hdr.my_header)" method from the deparser,
does this mean it will recirculate without attaching this to the packet? My
idea is to parse some portion of application layer bytes, analyze it and
truncate it at the end of the pipeline. In the next round, some other extra
bytes of the application get parsed, analyzed, and truncated in the end.
Is not using the packet.emit method for the parsed byte in my_header do the
job?

Thanks.

Message 1:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
[sudo] password for osboxes:
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4
basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is not
used; removing
table fsm_transition_table {
^^^^^^^^^^^^^^^^^^^^

basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate
with non-empty argument not supported
recirculate(meta.resubmit_meta);        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j
build/basic.json -b simple_switch_grpc
Reading topology file.

Message 2:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4

basic.p4(214): [--Werror=type-error] error: recirculate: No argument for
parameter data        recirculate();
^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void
recirculate<T>(in T data);                                ^^^^

../../utils/Makefile:43: recipe for target 'basic.json' failed
make: *** [basic.json] Error 1

Hi all, I am writing a program to recirculate the packet in the pipeline. When I am using "recirculate(meta.resubmit_meta);" in the action method, it is showing a warning (Message 1 below) that recirculates with a non-empty argument not supported. When I am using "recirculate()" in the action method without an argument then it requires some argument. What is an appropriate way to recirculate it from egress to ingress with the modification done in-between? Any good implementation of recirculation for v1.model is there? Also if I remove the "packet.emit(hdr.my_header)" method from the deparser, does this mean it will recirculate without attaching this to the packet? My idea is to parse some portion of application layer bytes, analyze it and truncate it at the end of the pipeline. In the next round, some other extra bytes of the application get parsed, analyzed, and truncated in the end. Is not using the packet.emit method for the parsed byte in my_header do the job? Thanks. *Message 1*: osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make [sudo] password for osboxes: mkdir -p build pcaps logs p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o build/basic.json basic.p4 basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is not used; removing table fsm_transition_table { ^^^^^^^^^^^^^^^^^^^^ *basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate with non-empty argument not supported recirculate(meta.resubmit_meta); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^* sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j build/basic.json -b simple_switch_grpc Reading topology file. *Message 2*: osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make mkdir -p build pcaps logs p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o build/basic.json basic.p4 *basic.p4(214): [--Werror=type-error] error: recirculate: No argument for parameter data recirculate(); ^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void recirculate<T>(in T data); ^^^^* ../../utils/Makefile:43: recipe for target 'basic.json' failed make: *** [basic.json] Error 1
SG
Sahil Gupta
Fri, Dec 4, 2020 5:15 AM

One more thing.
If I tried to compile a program with recirculate on egress control block
then program halt during compilation.

Snippet of program:
control MyEgress(inout headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
action recirculate_packet() {
// Send again the packet through both pipelines
recirculate(hdr.http.byte1);
}
apply { recirculate_packet(); }
}

Message 3: (while compiling)
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4
basic.p4(263): [--Wwarn=unsupported] warning: recirculate: recirculate with
non-empty argument not supported
recirculate(hdr.http.byte1);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j
build/basic.json -b simple_switch_grpc
Reading topology file.
Building mininet topology.
Configuring switch s3 using P4Runtime with file pod-topo/s3-runtime.json

  • Using P4Info file build/basic.p4.p4info.txt...
  • Connecting to P4Runtime server on 127.0.0.1:50053 (bmv2)...
  • Setting pipeline config (build/basic.json)...

..............This where it halts................

On Thu, Dec 3, 2020 at 11:49 PM Sahil Gupta sg5414@g.rit.edu wrote:

Hi all,

I am writing a program to recirculate the packet in the pipeline.
When I am using "recirculate(meta.resubmit_meta);" in the action method,
it is showing a warning (Message 1 below) that recirculates with a
non-empty argument not supported. When I am using "recirculate()" in the
action method without an argument then it requires some argument.

What is an appropriate way to recirculate it from egress to ingress with
the modification done in-between? Any good implementation of recirculation
for v1.model is there?

Also if I remove the "packet.emit(hdr.my_header)" method from the
deparser, does this mean it will recirculate without attaching this to the
packet? My idea is to parse some portion of application layer bytes,
analyze it and truncate it at the end of the pipeline. In the next round,
some other extra bytes of the application get parsed, analyzed, and
truncated in the end.
Is not using the packet.emit method for the parsed byte in my_header do
the job?

Thanks.

Message 1:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
[sudo] password for osboxes:
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4
basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is not
used; removing
table fsm_transition_table {
^^^^^^^^^^^^^^^^^^^^

basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate
with non-empty argument not supported
recirculate(meta.resubmit_meta);        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j
build/basic.json -b simple_switch_grpc
Reading topology file.

Message 2:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4

basic.p4(214): [--Werror=type-error] error: recirculate: No argument for
parameter data        recirculate();
^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void
recirculate<T>(in T data);                                ^^^^

../../utils/Makefile:43: recipe for target 'basic.json' failed
make: *** [basic.json] Error 1

One more thing. If I tried to compile a program with recirculate on egress control block then program halt during compilation. *Snippet of program*: control MyEgress(inout headers hdr, inout metadata meta, inout standard_metadata_t standard_metadata) { action recirculate_packet() { // Send again the packet through both pipelines recirculate(hdr.http.byte1); } apply { recirculate_packet(); } } *Message 3: (while compiling)* osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make mkdir -p build pcaps logs p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o build/basic.json basic.p4 basic.p4(263): [--Wwarn=unsupported] warning: recirculate: recirculate with non-empty argument not supported recirculate(hdr.http.byte1); ^^^^^^^^^^^^^^^^^^^^^^^^^^^ sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j build/basic.json -b simple_switch_grpc Reading topology file. Building mininet topology. Configuring switch s3 using P4Runtime with file pod-topo/s3-runtime.json - Using P4Info file build/basic.p4.p4info.txt... - Connecting to P4Runtime server on 127.0.0.1:50053 (bmv2)... - Setting pipeline config (build/basic.json)... *..............This where it halts................* On Thu, Dec 3, 2020 at 11:49 PM Sahil Gupta <sg5414@g.rit.edu> wrote: > Hi all, > > I am writing a program to recirculate the packet in the pipeline. > When I am using "recirculate(meta.resubmit_meta);" in the action method, > it is showing a warning (Message 1 below) that recirculates with a > non-empty argument not supported. When I am using "recirculate()" in the > action method without an argument then it requires some argument. > > What is an appropriate way to recirculate it from egress to ingress with > the modification done in-between? Any good implementation of recirculation > for v1.model is there? > > Also if I remove the "packet.emit(hdr.my_header)" method from the > deparser, does this mean it will recirculate without attaching this to the > packet? My idea is to parse some portion of application layer bytes, > analyze it and truncate it at the end of the pipeline. In the next round, > some other extra bytes of the application get parsed, analyzed, and > truncated in the end. > Is not using the packet.emit method for the parsed byte in my_header do > the job? > > Thanks. > > *Message 1*: > osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make > [sudo] password for osboxes: > mkdir -p build pcaps logs > p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o > build/basic.json basic.p4 > basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is not > used; removing > table fsm_transition_table { > ^^^^^^^^^^^^^^^^^^^^ > > > *basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate > with non-empty argument not supported > recirculate(meta.resubmit_meta); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^* > sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j > build/basic.json -b simple_switch_grpc > Reading topology file. > > *Message 2*: > osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make > mkdir -p build pcaps logs > p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o > build/basic.json basic.p4 > > > > > > *basic.p4(214): [--Werror=type-error] error: recirculate: No argument for > parameter data recirculate(); > ^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void > recirculate<T>(in T data); ^^^^* > ../../utils/Makefile:43: recipe for target 'basic.json' failed > make: *** [basic.json] Error 1 > > >
AF
Andy Fingerhut
Fri, Dec 4, 2020 5:48 AM

When I compile a test program that does a call to recirculate({}); (note
the empty list as an argument) in the egress control, it compiles with no
errors, and no warnings, and passes a test with a recirculated packet
occurring.

As noted in the documentation here, the v1model implementation does not
fully support recirculation while preserving metadata, nor resubmit nor
clone operations while preserving metadata.  They work well if you invoke
them preserving no metadata, with an empty list of fields.  If you give a
non-empty list of fields, you will get a warning that it is not supported,
but in some cases it might happen to preserve the metadata fields you
give, but if it does so, this is more by happy accident than by design.
https://github.com/p4lang/behavioral-model/blob/master/docs/simple_switch.md#restrictions-on-recirculate-resubmit-and-clone-operations

This limitation should not be too difficult to handle for recirculated
packets, if you are willing to create your own header for carrying fields
you want to go along with the recirculated packet, and parser that extra
header in your parser code.

When a packet is recirculated, it should include all headers that are
emitted by your deparser, but only those headers that are valid at the time
they are emitted.  If you find a case where it is not including all valid
headers that are emitted, please file a bug report.

Andy

On Thu, Dec 3, 2020 at 9:16 PM Sahil Gupta sg5414@rit.edu wrote:

One more thing.
If I tried to compile a program with recirculate on egress control block
then program halt during compilation.

Snippet of program:
control MyEgress(inout headers hdr,
inout metadata meta,
inout standard_metadata_t standard_metadata) {
action recirculate_packet() {
// Send again the packet through both pipelines
recirculate(hdr.http.byte1);
}
apply { recirculate_packet(); }
}

Message 3: (while compiling)
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4
basic.p4(263): [--Wwarn=unsupported] warning: recirculate: recirculate
with non-empty argument not supported
recirculate(hdr.http.byte1);
^^^^^^^^^^^^^^^^^^^^^^^^^^^
sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j
build/basic.json -b simple_switch_grpc
Reading topology file.
Building mininet topology.
Configuring switch s3 using P4Runtime with file pod-topo/s3-runtime.json

  • Using P4Info file build/basic.p4.p4info.txt...
  • Connecting to P4Runtime server on 127.0.0.1:50053 (bmv2)...
  • Setting pipeline config (build/basic.json)...

..............This where it halts................

On Thu, Dec 3, 2020 at 11:49 PM Sahil Gupta sg5414@g.rit.edu wrote:

Hi all,

I am writing a program to recirculate the packet in the pipeline.
When I am using "recirculate(meta.resubmit_meta);" in the action method,
it is showing a warning (Message 1 below) that recirculates with a
non-empty argument not supported. When I am using "recirculate()" in the
action method without an argument then it requires some argument.

What is an appropriate way to recirculate it from egress to ingress with
the modification done in-between? Any good implementation of recirculation
for v1.model is there?

Also if I remove the "packet.emit(hdr.my_header)" method from the
deparser, does this mean it will recirculate without attaching this to the
packet? My idea is to parse some portion of application layer bytes,
analyze it and truncate it at the end of the pipeline. In the next round,
some other extra bytes of the application get parsed, analyzed, and
truncated in the end.
Is not using the packet.emit method for the parsed byte in my_header do
the job?

Thanks.

Message 1:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo
make
[sudo] password for osboxes:
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4
basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is
not used; removing
table fsm_transition_table {
^^^^^^^^^^^^^^^^^^^^

basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate
with non-empty argument not supported
recirculate(meta.resubmit_meta);        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j
build/basic.json -b simple_switch_grpc
Reading topology file.

Message 2:
osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo
make
mkdir -p build pcaps logs
p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o
build/basic.json basic.p4

basic.p4(214): [--Werror=type-error] error: recirculate: No argument for
parameter data        recirculate();
^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void
recirculate<T>(in T data);                                ^^^^

../../utils/Makefile:43: recipe for target 'basic.json' failed
make: *** [basic.json] Error 1


When I compile a test program that does a call to recirculate({}); (note the empty list as an argument) in the egress control, it compiles with no errors, and no warnings, and passes a test with a recirculated packet occurring. As noted in the documentation here, the v1model implementation does not fully support recirculation while preserving metadata, nor resubmit nor clone operations while preserving metadata. They work well if you invoke them preserving no metadata, with an empty list of fields. If you give a non-empty list of fields, you will get a warning that it is not supported, but in some cases it might _happen_ to preserve the metadata fields you give, but if it does so, this is more by happy accident than by design. https://github.com/p4lang/behavioral-model/blob/master/docs/simple_switch.md#restrictions-on-recirculate-resubmit-and-clone-operations This limitation should not be too difficult to handle for recirculated packets, if you are willing to create your own header for carrying fields you want to go along with the recirculated packet, and parser that extra header in your parser code. When a packet is recirculated, it should include all headers that are emitted by your deparser, but only those headers that are valid at the time they are emitted. If you find a case where it is not including all valid headers that are emitted, please file a bug report. Andy On Thu, Dec 3, 2020 at 9:16 PM Sahil Gupta <sg5414@rit.edu> wrote: > One more thing. > If I tried to compile a program with recirculate on egress control block > then program halt during compilation. > > *Snippet of program*: > control MyEgress(inout headers hdr, > inout metadata meta, > inout standard_metadata_t standard_metadata) { > action recirculate_packet() { > // Send again the packet through both pipelines > recirculate(hdr.http.byte1); > } > apply { recirculate_packet(); } > } > > *Message 3: (while compiling)* > osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo make > mkdir -p build pcaps logs > p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o > build/basic.json basic.p4 > basic.p4(263): [--Wwarn=unsupported] warning: recirculate: recirculate > with non-empty argument not supported > recirculate(hdr.http.byte1); > ^^^^^^^^^^^^^^^^^^^^^^^^^^^ > sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j > build/basic.json -b simple_switch_grpc > Reading topology file. > Building mininet topology. > Configuring switch s3 using P4Runtime with file pod-topo/s3-runtime.json > - Using P4Info file build/basic.p4.p4info.txt... > - Connecting to P4Runtime server on 127.0.0.1:50053 (bmv2)... > - Setting pipeline config (build/basic.json)... > > *..............This where it halts................* > > > > > > On Thu, Dec 3, 2020 at 11:49 PM Sahil Gupta <sg5414@g.rit.edu> wrote: > >> Hi all, >> >> I am writing a program to recirculate the packet in the pipeline. >> When I am using "recirculate(meta.resubmit_meta);" in the action method, >> it is showing a warning (Message 1 below) that recirculates with a >> non-empty argument not supported. When I am using "recirculate()" in the >> action method without an argument then it requires some argument. >> >> What is an appropriate way to recirculate it from egress to ingress with >> the modification done in-between? Any good implementation of recirculation >> for v1.model is there? >> >> Also if I remove the "packet.emit(hdr.my_header)" method from the >> deparser, does this mean it will recirculate without attaching this to the >> packet? My idea is to parse some portion of application layer bytes, >> analyze it and truncate it at the end of the pipeline. In the next round, >> some other extra bytes of the application get parsed, analyzed, and >> truncated in the end. >> Is not using the packet.emit method for the parsed byte in my_header do >> the job? >> >> Thanks. >> >> *Message 1*: >> osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo >> make >> [sudo] password for osboxes: >> mkdir -p build pcaps logs >> p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o >> build/basic.json basic.p4 >> basic.p4(217): [--Wwarn=unused] warning: Table fsm_transition_table is >> not used; removing >> table fsm_transition_table { >> ^^^^^^^^^^^^^^^^^^^^ >> >> >> *basic.p4(214): [--Wwarn=unsupported] warning: recirculate: recirculate >> with non-empty argument not supported >> recirculate(meta.resubmit_meta); ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^* >> sudo python ../../utils/run_exercise.py -t pod-topo/topology.json -j >> build/basic.json -b simple_switch_grpc >> Reading topology file. >> >> *Message 2*: >> osboxes@osboxes:~/tutorials/exercises/dataplane_censorship_http$ sudo >> make >> mkdir -p build pcaps logs >> p4c-bm2-ss --p4v 16 --p4runtime-files build/basic.p4.p4info.txt -o >> build/basic.json basic.p4 >> >> >> >> >> >> *basic.p4(214): [--Werror=type-error] error: recirculate: No argument for >> parameter data recirculate(); >> ^^^^^^^^^^^^^/usr/local/share/p4c/p4include/v1model.p4(585)extern void >> recirculate<T>(in T data); ^^^^* >> ../../utils/Makefile:43: recipe for target 'basic.json' failed >> make: *** [basic.json] Error 1 >> >> >> _______________________________________________ > P4-dev mailing list > P4-dev@lists.p4.org > http://lists.p4.org/mailman/listinfo/p4-dev_lists.p4.org >
SG
Sahil Gupta
Fri, Dec 4, 2020 7:57 PM

Thanks, Andy for the detailed response and code. I found my mistake. It is
working now.
Any idea on the truncation of parse bits? If I remove the "packet.emit" (of
my application header) from the deparser, will it consider it removed in
the next recirculation cycle?

Thanks
Sahil Gupta

Thanks, Andy for the detailed response and code. I found my mistake. It is working now. Any idea on the truncation of parse bits? If I remove the "packet.emit" (of my application header) from the deparser, will it consider it removed in the next recirculation cycle? Thanks Sahil Gupta
AF
Andy Fingerhut
Fri, Dec 4, 2020 8:10 PM

Recirculated packets can contain whatever headers you want them to.  Call
packet.emit on the headers you want to be in the recirculated packet (and
recall that emit does nothing if the header you attempt to emit is invalid,
which you can use to your advantage if you sometimes want a header included
in a packet, but sometimes not, by calling setInvalid() or setValid()
methods on those headers before the deparser code is executed).

When recirculated packets come back to the parser, they will contain the
sequence of bytes that was emitted in your deparser.

If that does not answer your question, then I do not understand your
question.  Please try asking it differently, or give an explicit example
demonstrating what you mean.

Andy

On Fri, Dec 4, 2020 at 11:57 AM Sahil Gupta sg5414@rit.edu wrote:

Thanks, Andy for the detailed response and code. I found my mistake. It is
working now.
Any idea on the truncation of parse bits? If I remove the "packet.emit"
(of my application header) from the deparser, will it consider it removed
in the next recirculation cycle?

Thanks
Sahil Gupta

Recirculated packets can contain whatever headers you want them to. Call packet.emit on the headers you want to be in the recirculated packet (and recall that emit does nothing if the header you attempt to emit is invalid, which you can use to your advantage if you sometimes want a header included in a packet, but sometimes not, by calling setInvalid() or setValid() methods on those headers before the deparser code is executed). When recirculated packets come back to the parser, they will contain the sequence of bytes that was emitted in your deparser. If that does not answer your question, then I do not understand your question. Please try asking it differently, or give an explicit example demonstrating what you mean. Andy On Fri, Dec 4, 2020 at 11:57 AM Sahil Gupta <sg5414@rit.edu> wrote: > Thanks, Andy for the detailed response and code. I found my mistake. It is > working now. > Any idea on the truncation of parse bits? If I remove the "packet.emit" > (of my application header) from the deparser, will it consider it removed > in the next recirculation cycle? > > Thanks > Sahil Gupta > >
SG
Sahil Gupta
Fri, Dec 4, 2020 8:35 PM

This clarifies my doubt.
setInvalid() or setValid() will help me add or remove the required bytes
for analysis.
Thanks a lot!!

Regards
Sahil Gupta

This clarifies my doubt. setInvalid() or setValid() will help me add or remove the required bytes for analysis. Thanks a lot!! Regards Sahil Gupta