Commit adcfaf48 authored by Claes Sjofors's avatar Claes Sjofors

QCom monitor, segement order assert removed, ticks removed, max limit and...

QCom monitor, segement order assert removed, ticks removed, max limit and purge of export buffer, configurable ack delay, segment size, export buffer quota
parent fb2e7ec9
...@@ -88,10 +88,11 @@ ...@@ -88,10 +88,11 @@
#else #else
# define MAX_SEGSIZE (1472 - sizeof(sHead)) # define MAX_SEGSIZE (1472 - sizeof(sHead))
#endif #endif
#define RTT_RXMIN 500 /* ms */ #define RTT_RXMIN 0.0500 /* seconds */
#define RTT_RXMAX 10000 /* ms */ #define RTT_RXMAX 10.000 /* seconds */
#define RACK_TMO 1 #define RACK_TMO 1
#define ALLOC_WARNING_LEVEL 500000 #define EXPORT_BUF_WARN_LEVEL 300000
#define EXPORT_BUF_QUOTA 600000
#define max(Dragon,Eagle) ((Dragon) > (Eagle) ? (Dragon) : (Eagle)) #define max(Dragon,Eagle) ((Dragon) > (Eagle) ? (Dragon) : (Eagle))
...@@ -161,7 +162,9 @@ struct sEseg { ...@@ -161,7 +162,9 @@ struct sEseg {
qdb_sBuffer *bp; qdb_sBuffer *bp;
char *p; char *p;
int bytes; int bytes;
time_tClock tmo; pwr_tTime tmo;
int sent;
pwr_tTime send_ts;
}; };
struct sIseg { struct sIseg {
...@@ -171,7 +174,7 @@ struct sIseg { ...@@ -171,7 +174,7 @@ struct sIseg {
int ts_recv; int ts_recv;
sLink *lp; sLink *lp;
pwr_tStatus sts; pwr_tStatus sts;
char buff[MAX_SEGSIZE]; char buff[1];
}; };
typedef union { typedef union {
...@@ -191,8 +194,9 @@ struct sLink { ...@@ -191,8 +194,9 @@ struct sLink {
thread_s thread; thread_s thread;
qdb_sBuffer *bp; qdb_sBuffer *bp;
char *p; char *p;
pwr_tDeltaTime ack_delay;
unsigned int exp_buf_quota;
sIseg tmo; sIseg tmo;
int alloc_cnt;
}; };
...@@ -303,6 +307,8 @@ struct { ...@@ -303,6 +307,8 @@ struct {
} l; } l;
static pwr_tStatus qcom_sts = PWR__SRVSTARTUP; static pwr_tStatus qcom_sts = PWR__SRVSTARTUP;
static int tics_per_sec = 0;
static unsigned int qcom_segment_size = 8192 - sizeof(sHead);
static void cancel_links(); static void cancel_links();
static pwr_tBoolean clean_insert (lst_sEntry*, sEseg*, pwr_tBoolean); static pwr_tBoolean clean_insert (lst_sEntry*, sEseg*, pwr_tBoolean);
...@@ -316,10 +322,10 @@ static sEseg* eseg_alloc(thread_sMutex*); ...@@ -316,10 +322,10 @@ static sEseg* eseg_alloc(thread_sMutex*);
static sEseg* eseg_build(qdb_sBuffer*); static sEseg* eseg_build(qdb_sBuffer*);
static void eseg_free(sEseg*); static void eseg_free(sEseg*);
static char* event_string (eEvent); static char* event_string (eEvent);
static pwr_tBoolean expired(time_tClock); static pwr_tBoolean expired(pwr_tTime*);
static void* export_thread(); static void* export_thread();
static sLink* get_link(pwr_tNodeId, sMsg*); static sLink* get_link(pwr_tNodeId, sMsg*);
static time_tClock get_tmo(sLink*, pwr_tBoolean); static void get_tmo(sLink*, pwr_tBoolean, pwr_tTime*);
static void* import_thread(); static void* import_thread();
static void ini_link_info (qdb_sLinkInfo*); static void ini_link_info (qdb_sLinkInfo*);
static sIseg* iseg_alloc(); static sIseg* iseg_alloc();
...@@ -328,6 +334,7 @@ static void iseg_import(sLink*, sIseg*); ...@@ -328,6 +334,7 @@ static void iseg_import(sLink*, sIseg*);
static void lack(sLink*, sIseg*); static void lack(sLink*, sIseg*);
static void link_active(sLink*); static void link_active(sLink*);
static void link_connect(sLink*, sIseg*); static void link_connect(sLink*, sIseg*);
static void link_purge(sLink*);
static void link_disconnect(sLink*); static void link_disconnect(sLink*);
static void link_import(sLink*, sIseg*); static void link_import(sLink*, sIseg*);
static void link_redisconnect(sLink*); static void link_redisconnect(sLink*);
...@@ -345,13 +352,13 @@ static void set_recvmsg(sIseg*, sMsg*); ...@@ -345,13 +352,13 @@ static void set_recvmsg(sIseg*, sMsg*);
static void seg_send (sLink*, sEseg*); static void seg_send (sLink*, sEseg*);
static void set_sendmsg(sLink*, sEseg*, sMsg*); static void set_sendmsg(sLink*, sEseg*, sMsg*);
static void start_rto(sLink*); static void start_rto(sLink*);
static void update_rtt(sLink*, sIseg*); static void update_rtt(sLink*, sEseg*);
static void window_insert (sLink*, sEseg*); static void window_insert (sLink*, sEseg*);
static void window_remove (sLink*, sEseg*); static void window_remove (sLink*, sEseg*);
static sEseg* window_tmo (sLink*); static sEseg* window_tmo (sLink*);
static void check_link_status (); static void check_link_status ();
static void set_status (pwr_tStatus); static void set_status (pwr_tStatus);
static void panic (void); static void purge (void);
int int
...@@ -387,6 +394,10 @@ main (int argc, char *argv[]) ...@@ -387,6 +394,10 @@ main (int argc, char *argv[])
qdb->thread_lock.cond_wait = thread_CondWait; qdb->thread_lock.cond_wait = thread_CondWait;
#endif #endif
qcom_segment_size = qdb->my_node->seg_size - sizeof(sHead);
if ( qcom_segment_size == 0)
qcom_segment_size = 8192 - sizeof(sHead);
if (!qcom_CreateQ(&sts, &my_q, NULL, "events")) { if (!qcom_CreateQ(&sts, &my_q, NULL, "events")) {
errh_Fatal("qcom_CreateQ, %m", sts); errh_Fatal("qcom_CreateQ, %m", sts);
errh_SetStatus( PWR__SRVTERM); errh_SetStatus( PWR__SRVTERM);
...@@ -466,6 +477,30 @@ main (int argc, char *argv[]) ...@@ -466,6 +477,30 @@ main (int argc, char *argv[])
errh_Info("Exiting"); errh_Info("Exiting");
exit(QCOM__SUCCESS); exit(QCOM__SUCCESS);
} }
static int export_alloc_check( sLink *lp)
{
if ( lp->np->link.export_alloc_cnt > EXPORT_BUF_WARN_LEVEL && qcom_sts != QCOM__BUFFHIGH)
set_status(QCOM__BUFFHIGH);
if ( lp->np->link.export_alloc_cnt > lp->exp_buf_quota) {
link_purge(lp);
return 1;
}
return 0;
}
static void export_alloc_sub( sEseg *sp)
{
if ( !sp || !sp->lp)
return;
sp->lp->np->link.export_alloc_cnt -= sp->size;
if ( sp->lp->np->link.export_alloc_cnt < 0)
sp->lp->np->link.export_alloc_cnt = 0;
if ( qcom_sts == QCOM__BUFFHIGH && sp->lp->np->link.export_alloc_cnt < EXPORT_BUF_WARN_LEVEL )
set_status(PWR__SRUN);
}
static void static void
cancel_links () cancel_links ()
...@@ -529,7 +564,6 @@ clean_insert ( ...@@ -529,7 +564,6 @@ clean_insert (
if (sp->head.flags.b.first) if (sp->head.flags.b.first)
first = TRUE; first = TRUE;
if (first) { if (first) {
lst_Remove(NULL, &sp->c.le);
eseg_free(sp); eseg_free(sp);
li = se; li = se;
} else { } else {
...@@ -573,6 +607,17 @@ clean_insert ( ...@@ -573,6 +607,17 @@ clean_insert (
/* Insert new item */ /* Insert new item */
#if 0
// Segment sequence test
static int no = 0;
if ( esp->head.flags.b.last) {
no++;
if ( no == 100) {
no = 0;
return ret_pend;
}
}
#endif
lst_InsertPred(NULL, li, &esp->c.le, esp); lst_InsertPred(NULL, li, &esp->c.le, esp);
return ret_pend; return ret_pend;
...@@ -759,14 +804,14 @@ eseg_build ( ...@@ -759,14 +804,14 @@ eseg_build (
for ( for (
msp = NULL, size = bp->b.info.size + sizeof(bp->b.info), ii = 0, p = (char *)&bp->b.info; msp = NULL, size = bp->b.info.size + sizeof(bp->b.info), ii = 0, p = (char *)&bp->b.info;
size > 0; size > 0;
ii++, p += MAX_SEGSIZE, size -= MAX_SEGSIZE ii++, p += qcom_segment_size, size -= qcom_segment_size
) { ) {
sp = eseg_alloc(NULL); sp = eseg_alloc(NULL);
sp->p = p; sp->p = p;
sp->bp = bp; sp->bp = bp;
sp->lp = lp; sp->lp = lp;
sp->id = ii; sp->id = ii;
sp->size = MIN(size, MAX_SEGSIZE); sp->size = MIN(size, qcom_segment_size);
sp->head.flags.b.event = eEvent_user; sp->head.flags.b.event = eEvent_user;
sp->head.flags.b.bcast = bcast; sp->head.flags.b.bcast = bcast;
if (msp == NULL) { if (msp == NULL) {
...@@ -777,10 +822,7 @@ eseg_build ( ...@@ -777,10 +822,7 @@ eseg_build (
sp->head.flags.b.middle = 1; sp->head.flags.b.middle = 1;
lst_InsertPred(NULL, &msp->le_seg, &sp->le_seg, sp); lst_InsertPred(NULL, &msp->le_seg, &sp->le_seg, sp);
} }
lp->alloc_cnt += sp->size; lp->np->link.export_alloc_cnt += sp->size;
if ( lp->alloc_cnt > ALLOC_WARNING_LEVEL && qcom_sts != QCOM__BUFFHIGH)
set_status(QCOM__BUFFHIGH);
//printf( "qmon alloc: %d (%d)\n", sp->lp->alloc_cnt, sp->size);
} }
sp->head.flags.b.middle = 0; sp->head.flags.b.middle = 0;
...@@ -812,6 +854,9 @@ eseg_build ( ...@@ -812,6 +854,9 @@ eseg_build (
} }
lst_InsertPred(NULL, &sp->le_bcast, &csp->le_bcast, csp); lst_InsertPred(NULL, &sp->le_bcast, &csp->le_bcast, csp);
sp = lst_Succ(NULL, &sp->le_seg, NULL); sp = lst_Succ(NULL, &sp->le_seg, NULL);
csp->lp->np->link.export_alloc_cnt += csp->size;
} while (sp != msp); } while (sp != msp);
} }
...@@ -834,8 +879,7 @@ eseg_free ( ...@@ -834,8 +879,7 @@ eseg_free (
if (bcast) thread_MutexLock(&l.bcast); if (bcast) thread_MutexLock(&l.bcast);
sp->lp->alloc_cnt -= sp->size; export_alloc_sub(sp);
//printf( "qmon free: %d (%d)\n", sp->lp->alloc_cnt, sp->size);
lst_Remove(NULL, &sp->c.le); lst_Remove(NULL, &sp->c.le);
if (lst_IsEmpty(NULL, &sp->le_bcast) && lst_IsEmpty(NULL, &sp->le_seg)) { if (lst_IsEmpty(NULL, &sp->le_bcast) && lst_IsEmpty(NULL, &sp->le_seg)) {
...@@ -884,12 +928,13 @@ event_string ( ...@@ -884,12 +928,13 @@ event_string (
static pwr_tBoolean static pwr_tBoolean
expired ( expired (
time_tClock clock pwr_tTime* clock
) )
{ {
int diff = clock - time_Clock(NULL, NULL); pwr_tTime now;
return diff <= 0; time_GetTimeMonotonic( &now);
return (time_Acomp( clock, &now) == -1);
} }
static void * static void *
...@@ -924,6 +969,7 @@ export_thread () ...@@ -924,6 +969,7 @@ export_thread ()
} qdb_ScopeUnlock; } qdb_ScopeUnlock;
continue; continue;
} }
export_alloc_check( sp->lp);
thread_MutexLock(&l.bcast); thread_MutexLock(&l.bcast);
...@@ -971,15 +1017,17 @@ get_link ( ...@@ -971,15 +1017,17 @@ get_link (
return lp; return lp;
} }
static time_tClock static void
get_tmo ( get_tmo (
sLink *lp, sLink *lp,
pwr_tBoolean do_inc pwr_tBoolean do_inc,
pwr_tTime *tmo
) )
{ {
int rto; float rto;
pwr_tTime now;
rto = (lp->np->link.rtt_rto + 0.5); rto = lp->np->link.rtt_rto;
if (rto > lp->np->link.rtt_rxmax) { if (rto > lp->np->link.rtt_rxmax) {
rto = lp->np->link.rtt_rxmax; rto = lp->np->link.rtt_rxmax;
...@@ -988,10 +1036,11 @@ get_tmo ( ...@@ -988,10 +1036,11 @@ get_tmo (
} else if (do_inc) { } else if (do_inc) {
lp->np->link.rtt_rto *= 2; lp->np->link.rtt_rto *= 2;
if (lp->np->link.rtt_rto > lp->np->link.rtt_rxmax) if (lp->np->link.rtt_rto > lp->np->link.rtt_rxmax)
lp->np->link.rtt_rto = lp->np->link.rtt_rxmax + 1; lp->np->link.rtt_rto = lp->np->link.rtt_rxmax + 0.01;
} }
return (time_tClock) (time_Clock(NULL, NULL) + rto); time_GetTimeMonotonic( &now);
time_Aadd( tmo, &now, time_FloatToD( 0, rto));
} }
#if defined OS_VMS #if defined OS_VMS
...@@ -1128,9 +1177,9 @@ iseg_alloc () ...@@ -1128,9 +1177,9 @@ iseg_alloc ()
sp = lst_RemoveSucc(&l.iseg.mutex, &l.iseg.lh, NULL); sp = lst_RemoveSucc(&l.iseg.mutex, &l.iseg.lh, NULL);
if (sp == NULL) { if (sp == NULL) {
sp = (sIseg *)calloc(1, sizeof(*sp)); sp = (sIseg *)calloc(1, sizeof(*sp) + qcom_segment_size - 1);
lst_Init(NULL, &sp->c.le, sp); lst_Init(NULL, &sp->c.le, sp);
sp->size = sizeof(sp->buff); sp->size = qcom_segment_size;
} }
return sp; return sp;
...@@ -1143,9 +1192,9 @@ iseg_free ( ...@@ -1143,9 +1192,9 @@ iseg_free (
{ {
pwr_Assert(!lst_IsLinked(NULL, &sp->c.le)); pwr_Assert(!lst_IsLinked(NULL, &sp->c.le));
memset(sp, 0, sizeof(*sp)); memset(sp, 0, sizeof(*sp) + qcom_segment_size - 1);
lst_Init(NULL, &sp->c.le, sp); lst_Init(NULL, &sp->c.le, sp);
sp->size = sizeof(sp->buff); sp->size = qcom_segment_size;
lst_InsertPred(&l.iseg.mutex, &l.iseg.lh, &sp->c.le, sp); lst_InsertPred(&l.iseg.mutex, &l.iseg.lh, &sp->c.le, sp);
} }
...@@ -1171,21 +1220,29 @@ iseg_import ( ...@@ -1171,21 +1220,29 @@ iseg_import (
} }
if (sp->head.flags.b.first) { if (sp->head.flags.b.first) {
pwr_Assert(lp->bp == NULL); // pwr_Assert(lp->bp == NULL);
ip = (qdb_sInfo *)sp->buff; ip = (qdb_sInfo *)sp->buff;
decode_info(ip); decode_info(ip);
qdb_ScopeLock { qdb_ScopeLock {
if ( lp->bp != NULL) {
lp->np->link.err_seg_seq++;
qdb_Free( NULL, lp->bp);
}
lp->bp = qdb_Alloc(&sts, qdb_eBuffer_base, ip->size); lp->bp = qdb_Alloc(&sts, qdb_eBuffer_base, ip->size);
} qdb_ScopeUnlock; } qdb_ScopeUnlock;
if ( lp->bp == NULL) { if ( lp->bp == NULL) {
panic(); purge();
return; return;
} }
lp->bp->c.flags.m |= ip->flags.m & qdb_mBuffer_maskExport; lp->bp->c.flags.m |= ip->flags.m & qdb_mBuffer_maskExport;
lp->p = (char *)&lp->bp->b.info; lp->p = (char *)&lp->bp->b.info;
} else if (!sp->head.flags.b.first) { } else if (!sp->head.flags.b.first) {
pwr_Assert(lp->bp != NULL); // pwr_Assert(lp->bp != NULL);
pwr_Assert(lp->p != NULL); // pwr_Assert(lp->p != NULL);
if ( lp->bp == NULL) {
lp->np->link.err_seg_seq++;
return;
}
} }
memcpy(lp->p, sp->buff, sp->size); memcpy(lp->p, sp->buff, sp->size);
...@@ -1232,7 +1289,8 @@ lack ( ...@@ -1232,7 +1289,8 @@ lack (
it can be released. */ it can be released. */
if (diff == 0 && isp->head.rack.ts == sp->head.lack.ts) if (diff == 0 && isp->head.rack.ts == sp->head.lack.ts)
update_rtt(lp, isp); //update_rtt(lp, isp);
update_rtt(lp, sp);
window_remove(lp, sp); window_remove(lp, sp);
...@@ -1319,7 +1377,7 @@ link_disconnect ( ...@@ -1319,7 +1377,7 @@ link_disconnect (
memset(&lp->np->link.rack, 0, sizeof(lp->np->link.rack)); memset(&lp->np->link.rack, 0, sizeof(lp->np->link.rack));
lp->np->link.seq = 0; lp->np->link.seq = 0;
start_rto(lp); start_rto(lp);
lp->np->link.rack_tmo = 0; lp->np->link.rack_tmo = pwr_cNTime;
/* Empty send list */ /* Empty send list */
...@@ -1358,12 +1416,51 @@ link_disconnect ( ...@@ -1358,12 +1416,51 @@ link_disconnect (
lp->bp = NULL; lp->bp = NULL;
lp->p = NULL; lp->p = NULL;
lp->alloc_cnt = 0; lp->np->link.export_alloc_cnt = 0;
sp = create_connect(lp); sp = create_connect(lp);
lst_InsertSucc(NULL, &lp->lh_send, &sp->c.le, sp); lst_InsertSucc(NULL, &lp->lh_send, &sp->c.le, sp);
check_link_status(); check_link_status();
} }
static void
link_purge (
sLink *lp
)
{
sEseg *sp, *nsp;
int purge = 0;
int alloc_cnt = 0;
if (!lp->np->link.flags.b.connected) {
pwr_Assert(!lp->np->link.flags.b.active);
return;
}
/* Purge send list */
int i = 0;
for (
sp = lst_Succ(NULL, &lp->lh_send, NULL);
sp != NULL;
sp = nsp
) {
nsp = lst_Succ(NULL, &sp->c.le, NULL);
if ( !purge && i > 50 && sp->head.flags.b.first)
purge = 1;
if ( purge) {
eseg_free(sp);
}
else
alloc_cnt += sp->size;
i++;
}
printf( "link_purge: %d cnt %d (%d)\n", i, lp->np->link.export_alloc_cnt, alloc_cnt);
lp->np->link.export_alloc_cnt = alloc_cnt;
lp->np->link.export_purge_cnt++;
}
static void static void
link_import ( link_import (
...@@ -1416,7 +1513,7 @@ link_redisconnect ( ...@@ -1416,7 +1513,7 @@ link_redisconnect (
lp->np->link.pending_rack = NO; lp->np->link.pending_rack = NO;
start_rto(lp); start_rto(lp);
lp->np->link.rack_tmo = 0; lp->np->link.rack_tmo = pwr_cNTime;
sp = lst_Succ(NULL, &lp->lh_win, NULL); sp = lst_Succ(NULL, &lp->lh_win, NULL);
if (sp == NULL) if (sp == NULL)
...@@ -1424,7 +1521,7 @@ link_redisconnect ( ...@@ -1424,7 +1521,7 @@ link_redisconnect (
pwr_Assert(sp != NULL); pwr_Assert(sp != NULL);
pwr_Assert(sp->head.flags.b.event == eEvent_connect); pwr_Assert(sp->head.flags.b.event == eEvent_connect);
sp->tmo = 0; sp->tmo = pwr_cNTime;
} }
...@@ -1440,7 +1537,7 @@ link_send ( ...@@ -1440,7 +1537,7 @@ link_send (
} else if ((sp = pending_send(lp)) != NULL) { } else if ((sp = pending_send(lp)) != NULL) {
window_insert(lp, sp); window_insert(lp, sp);
seg_send(lp, sp); seg_send(lp, sp);
} else if (lp->np->link.pending_rack && expired(lp->np->link.rack_tmo)) { } else if (lp->np->link.pending_rack && expired(&lp->np->link.rack_tmo)) {
send_ack(lp); send_ack(lp);
} }
} }
...@@ -1504,28 +1601,35 @@ link_tmo ( ...@@ -1504,28 +1601,35 @@ link_tmo (
sLink *lp sLink *lp
) )
{ {
int diff_send = 0; pwr_tDeltaTime diff_send = pwr_cNDeltaTime;
int diff_rack = 0; pwr_tDeltaTime diff_rack = pwr_cNDeltaTime;
time_tClock clock = time_Clock(NULL, NULL); pwr_tTime clock;
time_tClock tmo = 0; pwr_tDeltaTime tmo = pwr_cNDeltaTime;
sEseg *sp; sEseg *sp;
time_GetTimeMonotonic( &clock);
if (lst_Succ(NULL, &lp->lh_send, NULL) != NULL && if (lst_Succ(NULL, &lp->lh_send, NULL) != NULL &&
lp->np->link.win_count < lp->np->link.win_max) lp->np->link.win_count < lp->np->link.win_max)
return time_ZeroD(&lp->np->link.timer); return time_ZeroD(&lp->np->link.timer);
if (lp->np->link.pending_rack) { if (lp->np->link.pending_rack) {
diff_rack = lp->np->link.rack_tmo - clock; time_Adiff( &diff_rack, &lp->np->link.rack_tmo, &clock);
diff_rack = MAX(0, diff_rack); if ( time_Dcomp( &diff_rack, 0) == -1)
diff_rack = pwr_cNDeltaTime;
} }
if ((sp = lst_Succ(NULL, &lp->lh_win, NULL)) != NULL) { if ((sp = lst_Succ(NULL, &lp->lh_win, NULL)) != NULL) {
diff_send = sp->tmo - clock; time_Adiff( &diff_send, &sp->tmo, &clock);
diff_send = MAX(0, diff_send); if ( time_Dcomp( &diff_send, 0) == -1)
diff_send = pwr_cNDeltaTime;
} }
if (lp->np->link.pending_rack && sp != NULL) { if (lp->np->link.pending_rack && sp != NULL) {
tmo = MIN(diff_rack, diff_send); if ( time_Dcomp( &diff_rack, &diff_send) == -1)
tmo = diff_rack;
else
tmo = diff_send;
} else if (lp->np->link.pending_rack) { } else if (lp->np->link.pending_rack) {
tmo = diff_rack; tmo = diff_rack;
} else if (sp != NULL) { } else if (sp != NULL) {
...@@ -1536,7 +1640,8 @@ link_tmo ( ...@@ -1536,7 +1640,8 @@ link_tmo (
return &lp->np->link.timer; return &lp->np->link.timer;
} }
return time_ClockToD(NULL, &lp->np->link.timer, tmo); lp->np->link.timer = tmo;
return &lp->np->link.timer;
} }
static sLink * static sLink *
...@@ -1548,8 +1653,8 @@ new_link ( ...@@ -1548,8 +1653,8 @@ new_link (
pwr_tStatus sts; pwr_tStatus sts;
sLink *lp; sLink *lp;
sEseg *sp; sEseg *sp;
static int tics_per_sec = 0; float rtt_rxmin, rtt_rxmax;
int rtt_rxmin, rtt_rxmax; float ack_delay;
if (nid == qdb->my_node->nid) return NULL; if (nid == qdb->my_node->nid) return NULL;
if (nid == qdb->no_node->nid) return NULL; if (nid == qdb->no_node->nid) return NULL;
...@@ -1568,15 +1673,25 @@ new_link ( ...@@ -1568,15 +1673,25 @@ new_link (
pwr_Assert(lp->np != NULL); pwr_Assert(lp->np != NULL);
rtt_rxmin = max( RTT_RXMIN, max(lp->np->min_resend_time,qdb->my_node->min_resend_time)); rtt_rxmin = (float)(max(lp->np->min_resend_time,qdb->my_node->min_resend_time))/1000;
rtt_rxmax = max( RTT_RXMAX, max(lp->np->max_resend_time,qdb->my_node->max_resend_time)); if ( rtt_rxmin == 0)
rtt_rxmin = RTT_RXMIN;
rtt_rxmax = (float)(max(lp->np->max_resend_time,qdb->my_node->max_resend_time))/1000;
if ( rtt_rxmax == 0)
rtt_rxmax = RTT_RXMAX;
ack_delay = max(lp->np->ack_delay,qdb->my_node->ack_delay);
time_FloatToD( &lp->ack_delay, qdb->my_node->ack_delay);
lp->exp_buf_quota = max(lp->np->export_buf_quota,qdb->my_node->export_buf_quota);
if ( lp->exp_buf_quota == 0)
lp->exp_buf_quota = EXPORT_BUF_QUOTA;
lp->np->link.export_quota = lp->exp_buf_quota;
que_Create(NULL, &lp->q_in); que_Create(NULL, &lp->q_in);
lst_Init(NULL, &lp->lh_send, NULL); lst_Init(NULL, &lp->lh_send, NULL);
lst_Init(NULL, &lp->lh_win, NULL); lst_Init(NULL, &lp->lh_win, NULL);
lp->np->link.win_max = 1; lp->np->link.win_max = 1;
lp->np->link.rtt_rxmax = (rtt_rxmax * tics_per_sec) / 1000; lp->np->link.rtt_rxmax = rtt_rxmax;
lp->np->link.rtt_rxmin = (rtt_rxmin * tics_per_sec) / 1000; lp->np->link.rtt_rxmin = rtt_rxmin;
lp->tmo.c.action = eAction_tmo; lp->tmo.c.action = eAction_tmo;
if (mp != NULL) { if (mp != NULL) {
...@@ -1779,12 +1894,13 @@ set_rack ( ...@@ -1779,12 +1894,13 @@ set_rack (
if (sp->head.flags.b.resent) { if (sp->head.flags.b.resent) {
lp->np->link.pending_rack = YES; lp->np->link.pending_rack = YES;
lp->np->link.rack_tmo = time_Clock(NULL, NULL); time_GetTimeMonotonic( &lp->np->link.rack_tmo);
} else if (lp->np->link.pending_rack) { } else if (lp->np->link.pending_rack) {
lp->np->link.rack_tmo = time_Clock(NULL, NULL); time_GetTimeMonotonic( &lp->np->link.rack_tmo);
} else { } else {
lp->np->link.pending_rack = YES; lp->np->link.pending_rack = YES;
lp->np->link.rack_tmo = time_Clock(NULL, NULL) + RACK_TMO; /* lp->rack_tmo; */ time_GetTimeMonotonic( &lp->np->link.rack_tmo);
time_Aadd( &lp->np->link.rack_tmo, &lp->np->link.rack_tmo, &lp->ack_delay); /* lp->rack_tmo; */
} }
} }
...@@ -1799,7 +1915,7 @@ set_recvmsg ( ...@@ -1799,7 +1915,7 @@ set_recvmsg (
mp->iov[0].iov_base = (char *) &mp->head; mp->iov[0].iov_base = (char *) &mp->head;
mp->iov[0].iov_len = sizeof(mp->head); mp->iov[0].iov_len = sizeof(mp->head);
mp->iov[1].iov_base = (char *)sp->buff; mp->iov[1].iov_base = (char *)sp->buff;
mp->iov[1].iov_len = sizeof(sp->buff); mp->iov[1].iov_len = qcom_segment_size;
memset(&mp->sa, 0, sizeof(mp->sa)); memset(&mp->sa, 0, sizeof(mp->sa));
...@@ -1879,10 +1995,12 @@ seg_send ( ...@@ -1879,10 +1995,12 @@ seg_send (
start_rto(lp); start_rto(lp);
sp->head.flags.b.resent = 1; sp->head.flags.b.resent = 1;
} }
sp->tmo = get_tmo(lp, YES); get_tmo(lp, YES, &sp->tmo);
} else { } else {
sp->tmo = get_tmo(lp, NO); get_tmo(lp, NO, &sp->tmo);
} }
sp->sent = 1;
time_GetTimeMonotonic( &sp->send_ts);
sched_yield(); sched_yield();
} }
...@@ -1983,24 +2101,24 @@ start_rto ( ...@@ -1983,24 +2101,24 @@ start_rto (
lp->np->link.rtt_rto = rto; lp->np->link.rtt_rto = rto;
} }
static void static void
update_rtt ( update_rtt (
sLink *lp, sLink *lp,
sIseg *sp sEseg *sp
) )
{ {
int diff; pwr_tDeltaTime dt;
double delta; float delta;
pwr_tTime now;
if (sp->head.rack.seq == 0) if (sp->head.rack.seq == 0)
return; return;
diff = sp->ts_recv - sp->head.rack.ts; time_GetTimeMonotonic( &now);
if (diff <= 0) time_Adiff( &dt, &now, &sp->send_ts);
return; time_DToFloat( &lp->np->link.rtt_rtt, &dt);
lp->np->link.rtt_rtt = diff;
delta = lp->np->link.rtt_rtt - lp->np->link.rtt_srtt; delta = lp->np->link.rtt_rtt - lp->np->link.rtt_srtt;
lp->np->link.rtt_srtt += delta / 8; lp->np->link.rtt_srtt += delta / 8;
...@@ -2043,7 +2161,7 @@ window_tmo ( ...@@ -2043,7 +2161,7 @@ window_tmo (
{ {
sEseg *sp = lst_Succ(NULL, &lp->lh_win, NULL); sEseg *sp = lst_Succ(NULL, &lp->lh_win, NULL);
if (sp == NULL || !expired(sp->tmo)) if (sp == NULL || !expired(&sp->tmo))
return NULL; return NULL;
return sp; return sp;
...@@ -2087,12 +2205,12 @@ pwr_tStatus sts ...@@ -2087,12 +2205,12 @@ pwr_tStatus sts
static void static void
panic (void) purge (void)
{ {
pwr_tStatus sts; pwr_tStatus sts;
sLink *lp; sLink *lp;
errh_Error("Panic, qdb pool exhausted");
for (lp = tree_Minimum(&sts, l.links.table); lp != NULL; lp = tree_Successor(&sts, l.links.table, lp)) for (lp = tree_Minimum(&sts, l.links.table); lp != NULL; lp = tree_Successor(&sts, l.links.table, lp))
link_disconnect(lp); link_purge(lp);
errh_Error("Links purged, qdb pool exhausted");
} }
...@@ -2,13 +2,13 @@ ...@@ -2,13 +2,13 @@
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 70 87 67 77 82 77 77 76 83 86 84 76 83 84 83 82 83 84 80 84 32 32 70 87 67 77 82 77 77 76 83 86 84 76 83 84 83 82 83 84 80 68 32
32 108 105 111 97 111 97 105 97 116 97 105 111 101 105 101 101 101 105 101 105 32 32 108 105 111 97 111 97 105 97 116 97 105 111 101 105 101 101 101 105 101 101 32
32 97 110 117 120 117 120 110 115 100 114 109 99 113 109 113 109 113 109 110 109 32 32 97 110 117 120 117 120 110 115 100 114 109 99 113 109 113 109 113 109 110 108 32
32 103 100 110 105 110 32 32 116 32 105 101 97 117 101 0 111 117 101 100 101 32 32 103 100 110 105 110 32 32 116 32 105 101 97 117 101 0 111 117 101 100 97 32
32 115 111 116 109 100 114 114 32 100 97 111 108 101 115 0 116 101 115 105 111 32 32 115 111 116 109 100 114 114 32 100 97 111 108 101 115 0 116 101 115 105 121 32
32 0 119 0 117 32 101 101 114 101 110 117 32 110 116 0 101 110 116 110 117 32 32 0 119 0 117 32 101 101 114 101 110 117 32 110 116 0 101 110 116 110 0 32
32 0 32 0 109 116 115 115 116 118 99 116 97 99 97 0 32 99 97 103 116 32 32 0 32 0 109 116 115 115 116 118 99 116 97 99 97 0 32 99 97 103 0 32
32 0 32 0 32 114 101 101 116 105 101 0 99 101 109 0 97 101 109 0 0 32 32 0 32 0 32 114 101 101 116 105 101 0 99 101 109 0 97 101 109 0 0 32
32 0 32 0 115 105 110 110 0 97 0 0 107 32 112 0 99 32 112 0 0 32 32 0 32 0 115 105 110 110 0 97 0 0 107 32 112 0 99 32 112 0 0 32
32 0 32 0 105 112 100 100 0 116 0 0 32 110 0 0 107 110 0 0 0 32 32 0 32 0 105 112 100 100 0 116 0 0 32 110 0 0 107 110 0 0 0 32
...@@ -29,55 +29,55 @@ ...@@ -29,55 +29,55 @@
67 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 67 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
79 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 79 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
77 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 77 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 40 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
78 0 32 0 0 115 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
79 0 32 0 0 41 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
68 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
69 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32 32 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
78 0 32 0 0 32 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
79 0 32 0 0 40 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
68 0 32 0 0 116 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
69 0 32 0 0 105 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 99 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 115 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 0 32 0 0 41 0 0 0 0 0 0 32 0 0 0 32 0 0 0 0 32
32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 66 80 65 0 76 69 82 65 0 0 0 0 0 0 0 0 0 0 0 0 32 32 66 80 65 83 76 69 82 65 83 66 69 69 69 0 0 0 0 0 0 0 32
32 117 111 100 0 105 114 101 99 0 0 0 0 0 0 0 0 0 0 0 0 32 32 117 111 100 101 105 114 101 99 101 117 120 120 120 0 0 0 0 0 0 0 32
32 115 114 100 0 110 114 100 107 0 0 0 0 0 0 0 0 0 0 0 0 32 32 115 114 100 103 110 114 100 107 103 102 112 112 112 0 0 0 0 0 0 0 32
32 0 116 114 0 107 111 117 32 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 116 114 109 107 111 117 32 32 102 111 111 111 0 0 0 0 0 0 0 32
32 0 0 101 0 32 114 110 115 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 101 101 32 114 110 115 115 101 114 114 114 0 0 0 0 0 0 0 32
32 0 0 115 0 116 115 100 101 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 115 110 116 115 100 101 101 114 116 116 116 0 0 0 0 0 0 0 32
32 0 0 115 0 105 32 97 113 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 115 116 105 32 97 113 113 32 32 32 32 0 0 0 0 0 0 0 32
32 0 0 0 0 109 32 110 117 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 32 109 32 110 117 117 32 113 97 112 0 0 0 0 0 0 0 32
32 0 0 0 0 101 32 116 101 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 115 101 32 116 101 101 32 117 108 117 0 0 0 0 0 0 0 32
32 0 0 0 0 114 32 32 110 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 105 114 32 32 110 110 32 111 108 114 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 115 99 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 122 0 32 115 99 99 32 116 111 103 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 101 101 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 101 0 32 101 101 101 32 97 99 101 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 103 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 103 0 0 32 0 0 100 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 115 0 0 0 0 0 0 0 0 0 0 0 0 0 67 32 0 0 0 0 0 32 115 0 0 32 0 0 0 0 0 0 0 0 0 0 67
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 116 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 116
32 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 114 32 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 120 114
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 108 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 108
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 47 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 47
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 82 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 82
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 66 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 66
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 97 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 97
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 99 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 99
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 107 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 107
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 0 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 0 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
32 0 0 0 32 0 32 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 32 0 0 0 32 0 32 0 0 0 32 0 0 0 0 0 0 0 0 0 0 32
2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2 2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2
2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2 2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2
2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2 2 0 2 0 0 2 0 0 0 0 0 0 2 0 0 0 3 0 0 0 0 2
...@@ -109,8 +109,8 @@ ...@@ -109,8 +109,8 @@
2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 3 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
...@@ -118,46 +118,46 @@ ...@@ -118,46 +118,46 @@
2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3 2 0 3 0 0 2 0 0 0 0 0 0 3 0 0 0 3 0 0 0 0 3
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 3 2 2 2 2 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 3
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 2 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 1 1 1 1 1 3 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 1 1 1 1 1 3 1 1 1 3 1 1 1 1 1 1 1 1 1 1 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
2 0 0 0 0 0 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 2 2 0 0 0 0 0 3 0 0 0 2 0 0 0 0 0 0 0 0 0 0 2
******************************************************************* *******************************************************************
QCOM NODE QCOM NODE
...@@ -215,11 +215,11 @@ Text/Dualpar "" ...@@ -215,11 +215,11 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
Declaration INT Declaration FLOAT
x,y 21 6 x,y 21 6
------------------------------------------------------------------- -------------------------------------------------------------------
Number 5 Number 5
...@@ -230,11 +230,11 @@ Text/Dualpar "" ...@@ -230,11 +230,11 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
Declaration INT Declaration FLOAT
x,y 21 7 x,y 21 7
------------------------------------------------------------------- -------------------------------------------------------------------
Number 6 Number 6
...@@ -245,7 +245,7 @@ Text/Dualpar "" ...@@ -245,7 +245,7 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
...@@ -260,7 +260,7 @@ Text/Dualpar "" ...@@ -260,7 +260,7 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
...@@ -275,7 +275,7 @@ Text/Dualpar "" ...@@ -275,7 +275,7 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
...@@ -290,7 +290,7 @@ Text/Dualpar "" ...@@ -290,7 +290,7 @@ Text/Dualpar ""
Privileges SYS Privileges SYS
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
...@@ -395,11 +395,11 @@ Text/Dualpar "" ...@@ -395,11 +395,11 @@ Text/Dualpar ""
Privileges NO Privileges NO
Outputflags Outputflags
Characters 11 Characters 11
Decimals 0 Decimals 5
MaxLimit 0.000000 MaxLimit 0.000000
MinLimit 0.000000 MinLimit 0.000000
Database USER Database USER
Declaration INT Declaration FLOAT
x,y 23 20 x,y 23 20
------------------------------------------------------------------- -------------------------------------------------------------------
Number 17 Number 17
...@@ -450,6 +450,21 @@ x,y 62 3 ...@@ -450,6 +450,21 @@ x,y 62 3
Number 20 Number 20
Text "%" Text "%"
Type UPDATE Type UPDATE
Parameter QNODE_SEG_SIZE
Text/Dualpar ""
Privileges NO
Outputflags
Characters 11
Decimals 0
MaxLimit 0.000000
MinLimit 0.000000
Database USER
Declaration INT
x,y 62 4
-------------------------------------------------------------------
Number 21
Text "%"
Type UPDATE
Parameter QNODE_TIMER Parameter QNODE_TIMER
Text/Dualpar "" Text/Dualpar ""
Privileges NO Privileges NO
...@@ -462,7 +477,7 @@ Database USER ...@@ -462,7 +477,7 @@ Database USER
Declaration TIME Declaration TIME
x,y 62 5 x,y 62 5
------------------------------------------------------------------- -------------------------------------------------------------------
Number 21 Number 22
Text "%" Text "%"
Type UPDATE Type UPDATE
Parameter QNODE_ERRRED Parameter QNODE_ERRRED
...@@ -477,7 +492,7 @@ Database USER ...@@ -477,7 +492,7 @@ Database USER
Declaration INT Declaration INT
x,y 62 7 x,y 62 7
------------------------------------------------------------------- -------------------------------------------------------------------
Number 22 Number 23
Text "%" Text "%"
Type UPDATE Type UPDATE
Parameter QNODE_ERRSEQ Parameter QNODE_ERRSEQ
...@@ -492,6 +507,66 @@ Database USER ...@@ -492,6 +507,66 @@ Database USER
Declaration INT Declaration INT
x,y 62 8 x,y 62 8
------------------------------------------------------------------- -------------------------------------------------------------------
Number 24
Text "%"
Type UPDATE
Parameter QNODE_ERRSEGSEQ
Text/Dualpar ""
Privileges NO
Outputflags
Characters 11
Decimals 0
MaxLimit 0.000000
MinLimit 0.000000
Database USER
Declaration INT
x,y 62 9
-------------------------------------------------------------------
Number 25
Text "%"
Type UPDATE
Parameter QNODE_EXPORT_QUOTA
Text/Dualpar ""
Privileges NO
Outputflags
Characters 11
Decimals 0
MaxLimit 0.000000
MinLimit 0.000000
Database USER
Declaration INT
x,y 62 11
-------------------------------------------------------------------
Number 26
Text "%"
Type UPDATE
Parameter QNODE_EXPORT_ALLOC
Text/Dualpar ""
Privileges NO
Outputflags
Characters 11
Decimals 0
MaxLimit 0.000000
MinLimit 0.000000
Database USER
Declaration INT
x,y 62 12
-------------------------------------------------------------------
Number 27
Text "%"
Type UPDATE
Parameter QNODE_EXPORT_PURGE
Text/Dualpar ""
Privileges NO
Outputflags
Characters 11
Decimals 0
MaxLimit 0.000000
MinLimit 0.000000
Database USER
Declaration INT
x,y 62 13
-------------------------------------------------------------------
Number 200 Number 200
Text "%" Text "%"
Type UPDATE Type UPDATE
......
...@@ -12832,8 +12832,8 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx, ...@@ -12832,8 +12832,8 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx,
menu_ptr->value_ptr = (char *) &np->link.pending_rack; menu_ptr->value_ptr = (char *) &np->link.pending_rack;
menu_ptr++; menu_ptr++;
/* rack_tmo */ /* ack delay */
menu_ptr->value_ptr = (char *) &np->link.rack_tmo; menu_ptr->value_ptr = (char *) &np->ack_delay;
menu_ptr++; menu_ptr++;
/* bus */ /* bus */
...@@ -12864,6 +12864,10 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx, ...@@ -12864,6 +12864,10 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx,
#endif #endif
menu_ptr++; menu_ptr++;
/* seg_size */
menu_ptr->value_ptr = (char *) &np->seg_size;
menu_ptr++;
/* timer */ /* timer */
menu_ptr->value_ptr = (char *) &np->link.timer; menu_ptr->value_ptr = (char *) &np->link.timer;
menu_ptr++; menu_ptr++;
...@@ -12876,6 +12880,22 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx, ...@@ -12876,6 +12880,22 @@ int RTTSYS_QCOM_NODE( menu_ctx ctx,
menu_ptr->value_ptr = (char *) &np->link.err_seq; menu_ptr->value_ptr = (char *) &np->link.err_seq;
menu_ptr++; menu_ptr++;
/* err_seg_seq */
menu_ptr->value_ptr = (char *) &np->link.err_seg_seq;
menu_ptr++;
/* export_quota */
menu_ptr->value_ptr = (char *) &np->link.export_quota;
menu_ptr++;
/* export_alloc_cnt */
menu_ptr->value_ptr = (char *) &np->link.export_alloc_cnt;
menu_ptr++;
/* export_purge_cnt */
menu_ptr->value_ptr = (char *) &np->link.export_purge_cnt;
menu_ptr++;
/* node name */ /* node name */
menu_ptr->value_ptr = (char *) np->name; menu_ptr->value_ptr = (char *) np->name;
menu_ptr++; menu_ptr++;
......
...@@ -726,6 +726,10 @@ qcom_Put ( ...@@ -726,6 +726,10 @@ qcom_Put (
bp = inPool(sts, pp->data); bp = inPool(sts, pp->data);
if (bp == NULL) { if (bp == NULL) {
bp = qdb_Alloc(sts, qdb_eBuffer_base, pp->size); bp = qdb_Alloc(sts, qdb_eBuffer_base, pp->size);
if ( bp == NULL) {
*sts = QDB__QUOTAEXCEEDED;
break;
}
memcpy((char *)(bp + 1), pp->data, pp->size); memcpy((char *)(bp + 1), pp->data, pp->size);
} else { } else {
/* check that this buffer is really owned by this process */ /* check that this buffer is really owned by this process */
......
...@@ -443,8 +443,8 @@ typedef struct { ...@@ -443,8 +443,8 @@ typedef struct {
qdb_mLink flags; qdb_mLink flags;
int win_count; int win_count;
int win_max; int win_max;
int rtt_rxmax; float rtt_rxmax;
int rtt_rxmin; float rtt_rxmin;
float rtt_rtt; float rtt_rtt;
float rtt_srtt; float rtt_srtt;
float rtt_var; float rtt_var;
...@@ -453,12 +453,16 @@ typedef struct { ...@@ -453,12 +453,16 @@ typedef struct {
qdb_sAck rack; qdb_sAck rack;
int seq; int seq;
pwr_tBoolean pending_rack; pwr_tBoolean pending_rack;
time_tClock rack_tmo; pwr_tTime rack_tmo;
qcom_tBus bus; qcom_tBus bus;
struct sockaddr_in sa; struct sockaddr_in sa;
pwr_tDeltaTime timer; pwr_tDeltaTime timer;
int export_quota;
int export_alloc_cnt;
int export_purge_cnt;
int err_red; int err_red;
int err_seq; int err_seq;
int err_seg_seq;
} qdb_sLink; } qdb_sLink;
typedef char qdb_tQname[32]; typedef char qdb_tQname[32];
...@@ -677,6 +681,9 @@ typedef struct { ...@@ -677,6 +681,9 @@ typedef struct {
qcom_eNodeConnection connection; /* Type of connection */ qcom_eNodeConnection connection; /* Type of connection */
pwr_tUInt32 min_resend_time; pwr_tUInt32 min_resend_time;
pwr_tUInt32 max_resend_time; pwr_tUInt32 max_resend_time;
pwr_tUInt32 export_buf_quota;
pwr_tFloat32 ack_delay;
pwr_tUInt32 seg_size;
} qdb_sNode; } qdb_sNode;
typedef struct { typedef struct {
......
...@@ -74,6 +74,9 @@ addNode ( ...@@ -74,6 +74,9 @@ addNode (
np->connection = nep->connection; np->connection = nep->connection;
np->min_resend_time = nep->min_resend_time; np->min_resend_time = nep->min_resend_time;
np->max_resend_time = nep->max_resend_time; np->max_resend_time = nep->max_resend_time;
np->export_buf_quota = nep->export_buf_quota;
np->ack_delay = nep->ack_delay;
np->seg_size = nep->seg_size;
return np; return np;
} }
...@@ -121,7 +124,7 @@ qini_ParseFile ( ...@@ -121,7 +124,7 @@ qini_ParseFile (
) )
{ {
pwr_tStatus sts = 1; pwr_tStatus sts = 1;
int n; int n, n2;
char *s; char *s;
char buffer[256]; char buffer[256];
int error = 0; int error = 0;
...@@ -129,9 +132,12 @@ qini_ParseFile ( ...@@ -129,9 +132,12 @@ qini_ParseFile (
char s_nid[80]; char s_nid[80];
char s_naddr[80]; char s_naddr[80];
char s_port[80]; char s_port[80];
char s_connection[80]; char s_connection[10];
char s_min_resend_time[80]; char s_min_resend_time[20];
char s_max_resend_time[80]; char s_max_resend_time[20];
char s_export_buf_quota[20];
char s_ack_delay[20];
char s_seg_size[20];
pwr_tNodeId nid; pwr_tNodeId nid;
struct in_addr naddr; struct in_addr naddr;
qini_sNode *nep; qini_sNode *nep;
...@@ -144,8 +150,8 @@ qini_ParseFile ( ...@@ -144,8 +150,8 @@ qini_ParseFile (
continue; continue;
} }
n = sscanf(s, "%s %s %s %s %s %s %s", name, s_nid, s_naddr, s_port, s_connection, n = sscanf(s, "%s %s %s %s %s %s %s %s %s %s", name, s_nid, s_naddr, s_port, s_connection,
s_min_resend_time, s_max_resend_time); s_min_resend_time, s_max_resend_time, s_export_buf_quota, s_ack_delay, s_seg_size);
if (n < 3) { if (n < 3) {
errh_Error("error in line, <wrong number of arguments>, skip to next line.\n>> %s", s); errh_Error("error in line, <wrong number of arguments>, skip to next line.\n>> %s", s);
(*errors)++; (*errors)++;
...@@ -215,6 +221,26 @@ qini_ParseFile ( ...@@ -215,6 +221,26 @@ qini_ParseFile (
if (n > 4) nep->connection = atoi(s_connection); if (n > 4) nep->connection = atoi(s_connection);
if (n > 5) nep->min_resend_time = atoi(s_min_resend_time); if (n > 5) nep->min_resend_time = atoi(s_min_resend_time);
if (n > 6) nep->max_resend_time = atoi(s_max_resend_time); if (n > 6) nep->max_resend_time = atoi(s_max_resend_time);
if (n > 7)
nep->export_buf_quota = atoi(s_export_buf_quota);
else
nep->export_buf_quota = 30000;
if (n > 8) {
n2 = sscanf( s_ack_delay, "%f", &nep->ack_delay);
if ( n2 != 1)
nep->ack_delay = 0.01;
}
else
nep->ack_delay = 0.01;
if (n > 9) {
nep->seg_size = atoi(s_seg_size);
if ( nep->seg_size == 0)
nep->seg_size = 8192;
}
else
nep->seg_size = 8192;
memset(&arpreq, 0, sizeof(arpreq)); memset(&arpreq, 0, sizeof(arpreq));
memcpy(&arpreq.arp_pa.sa_data, &naddr, sizeof(naddr)); memcpy(&arpreq.arp_pa.sa_data, &naddr, sizeof(naddr));
inet_GetArpEntry(&sts, 0, &arpreq); inet_GetArpEntry(&sts, 0, &arpreq);
......
...@@ -112,6 +112,9 @@ typedef struct { ...@@ -112,6 +112,9 @@ typedef struct {
unsigned int min_resend_time; unsigned int min_resend_time;
unsigned int max_resend_time; unsigned int max_resend_time;
pwr_tBoolean connect; pwr_tBoolean connect;
pwr_tUInt32 export_buf_quota;
pwr_tFloat32 ack_delay;
pwr_tUInt32 seg_size;
} qini_sNode; } qini_sNode;
int qini_ParseFile (FILE*, tree_sTable*, int*, int*, int*); int qini_ParseFile (FILE*, tree_sTable*, int*, int*, int*);
......
...@@ -125,6 +125,28 @@ SObject pwrb:Class ...@@ -125,6 +125,28 @@ SObject pwrb:Class
Attr TypeRef = "pwrs:Type-$Float32" Attr TypeRef = "pwrs:Type-$Float32"
EndBody EndBody
EndObject EndObject
!/**
! QCom max export buffer quota.
!*/
Object QComExportBufQuota $Attribute 9
Body SysBody
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
!/**
! QCom acknowledge delay time in seconds.
!*/
Object QComAckDelay $Attribute 15
Body SysBody
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
EndObject
Object Template FriendNodeConfig
Body RtBody
Attr QComExportBufQuota = 600000
Attr QComAckDelay = 0.002
EndBody
EndObject EndObject
EndObject EndObject
EndSObject EndSObject
...@@ -197,6 +197,37 @@ SObject pwrb:Class ...@@ -197,6 +197,37 @@ SObject pwrb:Class
Attr TypeRef = "pwrs:Type-$Float32" Attr TypeRef = "pwrs:Type-$Float32"
EndBody EndBody
EndObject EndObject
!/**
! QCom max export buffer quota.
!*/
Object QComExportBufQuota $Attribute 14
Body SysBody
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
!/**
! QCom acknowledge delay time in seconds.
!*/
Object QComAckDelay $Attribute 15
Body SysBody
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! QCom segment size.
!*/
Object QComSegmentSize $Attribute 16
Body SysBody
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
EndObject
Object Template NodeConfig
Body RtBody
Attr QComExportBufQuota = 600000
Attr QComAckDelay = 0.002
Attr QComSegmentSize = 1500
EndBody
EndObject EndObject
Object PostCreate $DbCallBack Object PostCreate $DbCallBack
Body SysBody Body SysBody
......
...@@ -170,6 +170,37 @@ SObject pwrb:Class ...@@ -170,6 +170,37 @@ SObject pwrb:Class
Attr TypeRef = "pwrs:Type-$Float32" Attr TypeRef = "pwrs:Type-$Float32"
EndBody EndBody
EndObject EndObject
!/**
! QCom max export buffer size.
!*/
Object QComExportBufQuota $Attribute 12
Body SysBody
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
!/**
! QCom acknowledge delay time in seconds.
!*/
Object QComAckDelay $Attribute 13
Body SysBody
Attr TypeRef = "pwrs:Type-$Float32"
EndBody
EndObject
!/**
! QCom segment size.
!*/
Object QComSegmentSize $Attribute 14
Body SysBody
Attr TypeRef = "pwrs:Type-$UInt32"
EndBody
EndObject
EndObject
Object Template SevNodeConfig
Body RtBody
Attr QComExportBufQuota = 600000
Attr QComAckDelay = 0.002
Attr QComSegmentSize = 1500
EndBody
EndObject EndObject
Object PostCreate $DbCallBack Object PostCreate $DbCallBack
Body SysBody Body SysBody
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment