From: Sridhar Samudrala <[EMAIL PROTECTED]>
Date: Mon, 11 Jul 2005 09:56:10 -0700
> An incoming skb can contain more than 1 user message(chunk) and
> we do a clone for each message and store the per-message information
> in the ulpevent structure.
> Moreover, the ulpevent structure is already 34 bytes which makes it
> impossible to share the 40-byte control block with ip specific info.
If the sctp_chunk structure is per-user-message, and so is
the ulpevent object, it makes no sense to store the ulpevent
information seperately from sctp_chunk.
Look at how all of the ulpevent members tend to be initialized:
event->stream = ntohs(chunk->subh.data_hdr->stream);
event->ssn = ntohs(chunk->subh.data_hdr->ssn);
event->ppid = chunk->subh.data_hdr->ppid;
if (chunk->chunk_hdr->flags & SCTP_DATA_UNORDERED) {
event->flags |= MSG_UNORDERED;
event->cumtsn = sctp_tsnmap_get_ctsn(&asoc->peer.tsn_map);
}
event->tsn = ntohl(chunk->subh.data_hdr->tsn);
event->msg_flags |= chunk->chunk_hdr->flags;
event->iif = sctp_chunk_iif(chunk);
It's just transferring chunk information over to the ulpevent
structure with only minor modifications such as endinness
swapping of packet header fields.
So I think we can store all of this stuff in the sctp_chunk
and then just make sure the chunk is available. In fact, we
can replace all the event->{stream,ssn,ppid,cumtsn,tsn,iif}
members with just a backpointer to the sctp_chunk.
This also means you won't need to clone so much anymore either.
You'll only need to clone at the chunking level.
I'll see if I can get a spare moment to try and implement this.
-
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html