|
Lines 58-68
Link Here
|
| 58 |
} |
58 |
} |
| 59 |
|
59 |
|
| 60 |
RoutingList::RoutingList() |
60 |
RoutingList::RoutingList() |
|
|
61 |
: maxSegmentSize(TCP_ETHERNET_MTU * 32) |
| 61 |
{ |
62 |
{ |
| 62 |
int hndl = gCtrlBlock->getMyHandle(); |
63 |
int hndl = gCtrlBlock->getMyHandle(); |
| 63 |
char *envp = ::getenv("SCI_SEGMENT_SIZE"); |
64 |
char *envp = ::getenv("SCI_SEGMENT_SIZE"); |
| 64 |
if ((envp == NULL) || ((maxSegmentSize = ::atoi(envp)) <= TCP_ETHERNET_MTU)) |
65 |
if (envp != NULL) { |
| 65 |
maxSegmentSize = TCP_ETHERNET_MTU * 32; |
66 |
maxSegmentSize = atoi(envp); |
|
|
67 |
maxSegmentSize = maxSegmentSize > TCP_ETHERNET_MTU ? maxSegmentSize : TCP_ETHERNET_MTU * 32; |
| 68 |
} |
| 66 |
|
69 |
|
| 67 |
if (hndl == -1) { |
70 |
if (hndl == -1) { |
| 68 |
// this is a front end, not parent |
71 |
// this is a front end, not parent |
|
Lines 208-230
Link Here
|
| 208 |
sci_group_t gid = msg->getGroup(); |
211 |
sci_group_t gid = msg->getGroup(); |
| 209 |
Message::Type typ = msg->getType(); |
212 |
Message::Type typ = msg->getType(); |
| 210 |
int mid = msg->getID(); |
213 |
int mid = msg->getID(); |
| 211 |
int fid = msg->getFilterID(); |
214 |
int mfid = msg->getFilterID(); |
|
|
215 |
int hfid = mfid; |
| 212 |
int mlen = msg->getContentLen(); |
216 |
int mlen = msg->getContentLen(); |
| 213 |
*segments = (Message **)::malloc(segnum * sizeof(Message *)); |
217 |
*segments = (Message **)::malloc(segnum * sizeof(Message *)); |
| 214 |
Message **segs = *segments; |
218 |
Message **segs = *segments; |
| 215 |
|
219 |
|
| 216 |
if ((fid != SCI_FILTER_NULL) || (typ != Message::COMMAND)) { |
220 |
if ((mfid != SCI_FILTER_NULL) || (typ != Message::COMMAND)) { |
| 217 |
fid = SCI_ROUTE_SEGMENT; |
221 |
hfid = SCI_JOIN_SEGMENT; |
| 218 |
} |
222 |
} |
| 219 |
::memset(segs, 0, segnum * sizeof(Message *)); |
223 |
::memset(segs, 0, segnum * sizeof(Message *)); |
| 220 |
segs[0] = new Message(); |
224 |
segs[0] = new Message(); |
| 221 |
segs[0]->build(fid, gid, 0, NULL, NULL, Message::SEGMENT, segnum); |
225 |
segs[0]->build(hfid, gid, 0, NULL, NULL, Message::SEGMENT, segnum); |
| 222 |
segs[0]->setRefCount(ref); |
226 |
segs[0]->setRefCount(ref); |
| 223 |
|
227 |
|
| 224 |
for (i = 1; i < segnum; i++) { |
228 |
for (i = 1; i < segnum; i++) { |
| 225 |
segs[i] = new Message(); |
229 |
segs[i] = new Message(); |
| 226 |
size = (i < (segnum - 1)) ? maxSegmentSize : (mlen % maxSegmentSize); |
230 |
size = (i < (segnum - 1)) ? maxSegmentSize : (mlen % maxSegmentSize); |
| 227 |
segs[i]->build(fid, gid, 1, &ptr, &size, typ, mid); |
231 |
segs[i]->build(mfid, gid, 1, &ptr, &size, typ, mid); |
| 228 |
segs[i]->setRefCount(ref); |
232 |
segs[i]->setRefCount(ref); |
| 229 |
ptr += size; |
233 |
ptr += size; |
| 230 |
} |
234 |
} |