[P4] modify_field

Tejfel Máté matej at caesar.elte.hu
Mon Sep 28 14:45:18 CEST 2015


   Sziasztok!

   Szerintem ebben az esetben is most (és talán hosszabb távon is), 
azzal a koncepcióval járunk a legjobban, ha csinálunk egy-két speciális, 
de gyors megoldást (pl. field->field, int-> field) és a többi esetre 
valami lassabb, de működőt (sőt jövő hétre szerintem még az is elég, ha 
csak a spéci, gyors van meg, plusz jelezzük, hogy a többi TODO).
   Végignézve, amit H.Dani küldött az derül ki, hogy náluk is csak 
(python) "int" és "long" lehet itt egy érték és abból csinálnak byte 
tömböt. Én azt mondanám, hogy elsőre legyen egy int-es modify_field 
(esetleg, ha nem fér bele a valós paraméter az int-be, szólunk vmi 
csúnyát) és ha kell, ehelyett a hibajelzés helyett hívunk majd egy byte 
tömböket kezelő (gondolom lassabb) verziót. Ez persze azt jelenti, hogy 
több modify_field verzió is kellhet, de nekem ez jön ki a fent 
emlegetett koncepcióból. Ha persze az egész koncepcióra azt mondjuk, 
hogy hülyeség, azt jó lenne még időben eldönteni, de én egyelőre nem 
érzem így...

         M.

PS: Amúgy a Python-os int a C-s long-nak felel meg, a Python-os long 
pedig akármekkora lehet. Azaz C oldlaról gondolkodva valószínűleg egy 
modify_field_C_long kellene igazából...



2015-09-24 17:55 keltezéssel, Leskó Dániel írta:
> Hát igen, de ez a smart.py megközelítés nehezen fog menni a dpdk 
> libben sajnos.
>
> 2015.09.24. 17:46 keltezéssel, Dániel Horpácsi írta:
>> action.c:
>>
>> //::    elif arg[0]=="immediate":
>> //::        arg_str = "(uint8_t[]) {"
>> //::        for byte in arg[1]:
>> //::            arg_str += hex(byte) + ", "
>> //::        #endfor
>> //::        arg_str = arg_str[0:-2] + "}"
>> //::        return arg_str
>>
>> smart.py:
>>
>> if type(arg) is int or type(arg) is long:
>>     # assert(width > 0)
>>     tmp = arg
>>     nbytes = 0
>>     while tmp > 0:
>>         nbytes += 1
>>         tmp /= 256
>>     width = max(4, nbytes)
>>     type_ = "immediate"
>>     value = int_to_byte_array(arg, width)
>>
>> def int_to_byte_array(val, num_bytes):
>>     res = []
>>     for i in xrange(num_bytes):
>>         res.append(int(val % 256))
>>         val /= 256
>>     res.reverse()
>>     return res
>>
>> On 2015-09-24 16:37, Dániel Horpácsi wrote:
>>> Szia!
>>>
>>> Valoszinuleg erdemes ranezni az eredeti behav. modelben az 
>>> actions.c, primitives.h es primitives_arith.h template fajlokra, 
>>> vagyis a 'referenciaimplementaciora'. Nyilvan ezek nem feltetlenul 
>>> lesznek a legjobbak a Spider implementaciohoz, de a DPDK eseteben 
>>> akar elvi valtoztatas nelkul is atvehetoek, persze nemi 
>>> refaktoralassal.
>>>
>>> Dani
>>>
>>> On 2015-09-24 16:06, Leskó Dániel wrote:
>>>> Sziasztok!
>>>>
>>>>  Meetingen szóba került, hogy a modify_field-ből kellene egy 
>>>> konstansos változat is, de tudjuk a típusát annak a konstansak amit 
>>>> be akarunk másolni? (gondolom nem akarunk az összes típus szerinti 
>>>> függvényszignatúrát legyártani)
>>>>
>>>>  A specifikáció szerint egyébként a value lehet egy konstans, egy 
>>>> table action paramétere (itt ilyenkor csak a paraméter neve 
>>>> szerepel), egy referencia másik fieldre, egy referencia regiszterre.
>>>>
>>>>  Ezen túl van egy opcionális mask, ami állítja, hogy melyik bitek 
>>>> íródjanak felül és melyikek ne (ez szerencsére pszeudokóddal is le 
>>>> van írva)
>>>>
>>>>  Megengedett az is, hogy a módosítandó field és az új érték mérete 
>>>> különbözzön. Ilyenkor levágni vagy nyújtani kell az új értéket.
>>>>
>>>> Hát papíron ennyi mindent kellene tudnia a modify_fieldnek, de 
>>>> jelenleg csak egy memcpy a megvalósítása és nem is nagyon látom, 
>>>> hogy a fentiek mindegyikét hogyan lehetne belepréselni. Akinek van 
>>>> ötlete ne tartsa vissza.
>>>>
>>>> Dani
>>>> _______________________________________________
>>>> 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
>
> _______________________________________________
> P4 mailing list
> P4 at plc.inf.elte.hu
> https://plc.inf.elte.hu/mailman/listinfo/p4



More information about the P4 mailing list