[P4] Packet length
Brunner Márton
brmarci at caesar.elte.hu
Sun Sep 18 22:46:10 CEST 2016
Hali,
Körülbelül így kéne kinéznie a field_list P4 kódjának (forrás:
https://github.com/p4lang/p4c-bm/blob/master/tests/p4_programs/tcp_checksum.p4):
field_list tcp_checksum_list {
ipv4.srcAddr;
ipv4.dstAddr;
8'0;
ipv4.protocol;
routing_metadata.tcpLength;
tcp.srcPort;
tcp.dstPort;
tcp.seqNo;
tcp.ackNo;
tcp.dataOffset;
tcp.res;
tcp.ecn;
tcp.ctrl;
tcp.window;
tcp.urgentPtr;
payload;
}
Az első öt elem adja a pseudo headert. (A 8'0 egy 1 bájtos padding a
protocol előtt.) A routing_metadata egy külön metadata header, aminek a
tcpLength mezőjét tcp parse-oláskor számítjuk ki: vesszük az
ipv4.totalLen-t, és kivonjuk belőle az ipv4.ihl. A maradék mezők adják a
tcp header-t, a checksum field nélkül. Eddig még nem is lenne gond, csak
a P4 forrásokat kell átírni, mivel ezeket már támogatjuk.
Viszont a payload elemhez, ha általánosabb megoldást szeretnénk, nem
pedig egy beégetett TCP feldolgozást, akkor tudnunk kell a teljes csomag
hosszát.
Marci
On 2016. 09. 18. 20:49, Leskó Dániel wrote:
> Üdv!
>
> A pszeudo-header nem ügy, mert a checksum számoláshoz csak fel kell
> sorolni a fieldeket, és az mindegy, hogy melyik headerből jönnek.
> (lásd nat.p4 67-70 sorok)
>
> Én a tcp headerben nem látok length mezőt, ellenben a checksum
> fieldekhez is kell egy ilyen mező a peszeudo-headerbe. Ha jól látom én
> nemes egyszerűséggel a ipv4.totalLen-t raktam be oda, ami jó eséllyel
> nem korrekt megoldás. A jó megoldás valószínűleg az amit Marci
> javasol, mert ezt a hossz infót ki kell számolni, nincs benne
> direktben a headerben.
>
> Dani
>
>
> 2016.09.18. 20:40 keltezéssel, Sándor Laki írta:
>> Hi,
>>
>> A helyzet bonyolultabb, mivel még egy pseudo headert is be kell venni
>> checksum számításba, ami tartalmaz elemeket az IP fejlécből. A TCP
>> Segmens hosszáról a TCP fejléc Length mezője adhat információt.
>>
>> Üdv.
>> Sanyi
>>
>>
>>
>> On 2016.09.18. 19:02, Leskó Dániel wrote:
>>> Sziasztok!
>>>
>>> Én is láttam ilyen leírást, hogy a tcp checksum kiszámolásához a
>>> teljes payload is kellene, de kicsit hitetlenkedve fogadtam (nem is
>>> írtam bele a p4 kódba). Sanyi, tényleg így van ez?
>>>
>>> Dani
>>>
>>> 2016.09.18. 17:31 keltezéssel, Brunner Márton írta:
>>>> Sziasztok,
>>>>
>>>> A checksum-okkal kapcsolatban felvetődött egy problémám.
>>>>
>>>> Az ellenőrzést egy field_list alapján végezzük. Ebben szerepelhet
>>>> egy speciális "PAYLOAD" elem is, ami azt jelöli, hogy a
>>>> kiszámításhoz a listában megelőző field header-jének az adat része
>>>> (payload) is szükséges. Ez az adott header végétől a csomag végéig
>>>> tartó bájt sorozat lenne. Viszont jelenleg (amennyire én látom) a
>>>> packet_descriptor nem tartalmaz információt a csomag hosszáról. Így
>>>> nem tudom megállapítani, hogy meddig kéne a bájtokat vizsgálni.
>>>>
>>>> Lehetséges lenne a packet_descriptor-t kiegészíteni egy
>>>> packet_length mezővel, ami a csomag beolvasása után automatikusan
>>>> kitöltődik?
>>>>
>>>>
>>>> Marci
>>>>
>>>> _______________________________________________
>>>> P4 mailing list
>>>> P4 at plc.inf.elte.hu
>>>> https://plc.inf.elte.hu/mailman/listinfo/p4
>>>
>>>
>>> _______________________________________________
>>> P4 mailing list
>>> P4 at plc.inf.elte.hu
>>> https://plc.inf.elte.hu/mailman/listinfo/p4
>>
>
> _______________________________________________
> P4 mailing list
> P4 at plc.inf.elte.hu
> https://plc.inf.elte.hu/mailman/listinfo/p4
More information about the P4
mailing list