1*368c31abSDavid du Colombier typedef struct Packet Packet; 2*368c31abSDavid du Colombier typedef struct Mem Mem; 3*368c31abSDavid du Colombier typedef struct Frag Frag; 4*368c31abSDavid du Colombier 5*368c31abSDavid du Colombier enum { 6*368c31abSDavid du Colombier BigMemSize = MaxFragSize, 7*368c31abSDavid du Colombier SmallMemSize = BigMemSize/8, 8*368c31abSDavid du Colombier NLocalFrag = 2, 9*368c31abSDavid du Colombier }; 10*368c31abSDavid du Colombier 11*368c31abSDavid du Colombier /* position to carve out of a Mem */ 12*368c31abSDavid du Colombier enum { 13*368c31abSDavid du Colombier PFront, 14*368c31abSDavid du Colombier PMiddle, 15*368c31abSDavid du Colombier PEnd, 16*368c31abSDavid du Colombier }; 17*368c31abSDavid du Colombier 18*368c31abSDavid du Colombier struct Mem 19*368c31abSDavid du Colombier { 20*368c31abSDavid du Colombier Lock lk; 21*368c31abSDavid du Colombier int ref; 22*368c31abSDavid du Colombier uchar *bp; 23*368c31abSDavid du Colombier uchar *ep; 24*368c31abSDavid du Colombier uchar *rp; 25*368c31abSDavid du Colombier uchar *wp; 26*368c31abSDavid du Colombier Mem *next; 27*368c31abSDavid du Colombier }; 28*368c31abSDavid du Colombier 29*368c31abSDavid du Colombier enum { 30*368c31abSDavid du Colombier FragLocalFree, 31*368c31abSDavid du Colombier FragLocalAlloc, 32*368c31abSDavid du Colombier FragGlobal, 33*368c31abSDavid du Colombier }; 34*368c31abSDavid du Colombier 35*368c31abSDavid du Colombier struct Frag 36*368c31abSDavid du Colombier { 37*368c31abSDavid du Colombier int state; 38*368c31abSDavid du Colombier Mem *mem; 39*368c31abSDavid du Colombier uchar *rp; 40*368c31abSDavid du Colombier uchar *wp; 41*368c31abSDavid du Colombier Frag *next; 42*368c31abSDavid du Colombier }; 43*368c31abSDavid du Colombier 44*368c31abSDavid du Colombier struct Packet 45*368c31abSDavid du Colombier { 46*368c31abSDavid du Colombier int size; 47*368c31abSDavid du Colombier int asize; /* allocated memmory - always greater than size */ 48*368c31abSDavid du Colombier 49*368c31abSDavid du Colombier Packet *next; 50*368c31abSDavid du Colombier 51*368c31abSDavid du Colombier Frag *first; 52*368c31abSDavid du Colombier Frag *last; 53*368c31abSDavid du Colombier 54*368c31abSDavid du Colombier Frag local[NLocalFrag]; 55*368c31abSDavid du Colombier }; 56*368c31abSDavid du Colombier 57