예제 #1
0
파일: sev_ini.c 프로젝트: hfuhuang/proview
static pwr_tStatus stop (
  int		argc,
  char		**argv,
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sPut	put;
  char          data[] = "Shutdown you fool!";

  if (!qcom_Init(&sts, 0, "pwr_ini_stop")) {
    exit(sts);
  } 

  
  qid.qix = 550715;
  qid.nid = 0;
  put.type.b = 11;
  put.type.s = 1;
  put.reply.qix = 0;
  put.reply.nid = 0;
  put.data = data;
  put.size = sizeof(data) + 1;
  qcom_Put(&sts, &qid, &put);

  return 0;
}
예제 #2
0
파일: rt_cvols.c 프로젝트: hfuhuang/proview
void
cvols_Notify (
  cvol_sNotify		*nmp
)
{
  pwr_tStatus		lsts;
  pool_sQlink		*nl;
  gdb_sNode		*np;
  qcom_sQid		tgt;
  qcom_sPut		put;

  gdb_AssumeLocked;

  if (gdbroot->db->nethandler.qix == 0)
    return;

  tgt.qix = net_cProcHandler;

  gdb_Unlock;

    /* Send to all nodes that have mounted affected volume.

       NOTA BENE !!!
	  In this version we send to all known nodes. */

    for (
      nl = pool_Qsucc(NULL, gdbroot->pool, &gdbroot->db->nod_lh);
      nl != &gdbroot->db->nod_lh;
      nl = pool_Qsucc(NULL, gdbroot->pool, nl)
    ) {
      np = pool_Qitem(nl, gdb_sNode, nod_ll);
      if (np == gdbroot->my_node || np == gdbroot->no_node) continue;
      if (!np->flags.b.active) continue; /* Todo !!! What happens with consistency ? */

      tgt.nid = np->nid;

      if (!net_Put(&lsts, &tgt, &nmp->msg, nmp->subtype, 0, nmp->size, 0))
	errh_Warning("Notify: error %x sending subtype %s to node %s", lsts, "Notify", np->name); 
    }

    /* Submit to the NETH ACP to check if any subscriptions are affected.  */

    put.type.b	= net_cMsgClass;
    put.type.s	= nmp->subtype;
    put.reply	= qcom_cNQid;
    put.data  	= (char *)&nmp->msg;
    put.size	= nmp->size;
    nmp->msg.hdr.hdr.xdr = 0;
    nmp->msg.hdr.hdr.msn = 0;
    nmp->msg.hdr.hdr.nid = gdbroot->my_node->nid;

    qcom_Put(&lsts, &qcom_cQnacp, &put);

  gdb_Lock;

}
예제 #3
0
main (int argc, char *argv[])
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sQid	fqid;
  qcom_sGet	get;
  qcom_sPut	put;
  qdb_sInit	init;
  qdb_sNode	*np;
  qcom_sQattr	attr;
  void		*p;

  if (!qcom_Init(&sts, NULL)) exit(sts);

  attr.type = qcom_eQtype_forward;
  attr.quota = 100;
  fqid.nid = pwr_cNNodeId;
  fqid.qix = 550715;

  if(!qcom_CreateQ(&sts, &fqid, &attr)) exit(sts);

  qid.nid = pwr_cNNodeId;
  qid.qix = qdb_cIloopBack;

  if(!qcom_CreateQ(&sts, &qid, NULL)) exit(sts);
  if(!qcom_Bind(&sts, &qid, &fqid)) exit(sts);

  while (1) {
    get.data = NULL;
    p = qcom_Get(&sts, &qid, &get, 60000);  
    if (p == NULL) continue;
//    printf("\nsender..: %d,%d\n", get.sender.nid, get.pid);
//    printf("receiver: %d,%d\n", get.receiver.nid, get.receiver.qix);
//    printf("reply...: %d,%d\n", get.reply.nid, get.reply.qix);
//    printf("type....: %d,%d\n", get.type.b, get.type.s);
//    printf("size....: %d\n", get.size);
    put.reply = qid;
    put.type = get.type;
    put.size = get.size;
    put.data = p;
    qcom_Put(&sts, &get.reply, &put);
    if (EVEN(sts))
      qcom_Free(&sts, p);
  }
}
예제 #4
0
pwr_tStatus                  
hd_NetSendMessage(           
  qcom_sQid *qid,            
  co_sPlatform *recPlatform,  
  int subtype,               
  hd_sHead *hp,              
  unsigned int size          
) {
  pwr_tStatus sts = HD__SUCCESS;
  pwr_tStatus sts2;
  qcom_sPut   msg;
  XDR xdrs;

  if ((msg.data = (char*)qcom_Alloc(&sts, size)) == NULL) {
    return HD__INSVIRMEM;
  }

  msg.type.b = hd_cMsgClass;
  msg.type.s = hp->type = subtype;
  msg.reply = hp->qid;
  msg.size = size;

  if (recPlatform == NULL || co_IsXdrNeeded(&hp->platform, recPlatform)) {
    hp->xdr = TRUE;
    xdrmem_create(&xdrs, msg.data, size, XDR_ENCODE);
    sts = hd_NetXdrMessage(&xdrs, subtype, hp);
    if (EVEN(sts)) {
      qcom_Free(&sts2, msg.data);
      return sts;
    }
  } else {
    hp->xdr = FALSE;
    memcpy(msg.data, hp, size);
  }


  qcom_Put(&sts, qid, &msg);
  if (EVEN(sts)) {
    qcom_Free(&sts2, msg.data);
  } 

  return sts;
}                           
예제 #5
0
int Jop::que_put( const char *d)
{
  pwr_tStatus sts;
  qcom_sPut put;
  static char data[200];

  strcpy( data, d);
  printf("qcom_put: %s\n", data);
  put.data = data;
  put.size = strlen(data) + 1;
  put.type.b = qcom_eBtype__;
  put.type.s = qcom_eStype__;
  put.reply.qix = 0;
  put.reply.nid = 0;
 
  if ( jop_qcom_qid.qix == qcom_cNQix)
    return XNAV__NOTCONNECTED;

  qcom_Put( &sts, &jop_qcom_qid, &put);
  return sts;
}
예제 #6
0
JNIEXPORT jobject JNICALL Java_jpwr_rt_Qcom_putString
  (JNIEnv *env, jobject object, jint qix, jint nid, jstring jdata)
{
  int 		sts;
  const char 	*data;
  jclass 	pwrtStatus_id;
  jmethodID 	pwrtStatus_cid;
  jobject 	return_obj;
  jint		jsts;
  qcom_sQid	qid;
  qcom_sPut	put;
  char		*cstr;
//  int		sts2;

  pwrtStatus_id = (*env)->FindClass( env, "jpwr/rt/PwrtStatus");
  pwrtStatus_cid = (*env)->GetMethodID( env, pwrtStatus_id,
    	"<init>", "(I)V");

  data = (*env)->GetStringUTFChars( env, jdata, 0);
  cstr = (char *)data;
  put.data = (char *)data;
  put.size = strlen(data) + 1;
  put.type.b = qcom_eBtype__;
  put.type.s = qcom_eStype__;
  put.reply.qix = 0;
  put.reply.nid = 0;
  qid.qix = qix;
  qid.nid = nid;
  sts = qcom_Put( &sts, &qid, &put);
  (*env)->ReleaseStringUTFChars( env, jdata, cstr);
//  if ( ODD(sts))
//    qcom_Free( &sts2, put.data);
  jsts = (jint) sts;
  return_obj = (*env)->NewObject( env, pwrtStatus_id,
  	pwrtStatus_cid, jsts);
  return return_obj;
}
예제 #7
0
main (int argc, char *argv[])
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sGet	get;
  qcom_sPut	put;
  qcom_sQid	loop;
  int		data[DATA_SIZE];
  int		i;
  int		j;
  int		max = 1000;
  char		*sp;

  qid = qcom_cNQid;

  if (argc < 2) exit(12);
  if (argc > 2) max = atoi(argv[2]);

  for (j = 0; j < DATA_SIZE; j++)
    data[j] = j;

  loop.nid = atoi(argv[1]);
  loop.qix = qcom_cIloopBack;

  if (!qcom_Init(&sts, NULL)) exit(sts);
  if (!qcom_CreateQ(&sts, &qid, NULL)) exit(sts);

  for (i = 1; i < max; i++) {
    for (j = 0; j < DATA_SIZE; j++)
      ++data[j];
    sp = qcom_Alloc(&sts, sizeof(data));
    if (sp == NULL) exit(sts);
    memcpy(sp, &data, sizeof(data));
    put.type.b = 10;
    put.type.s = i;
    put.reply = qid;
    put.size = sizeof(data);
    put.data = sp;
    qcom_Put(&sts, &loop, &put);
    if (EVEN(sts)) exit(sts);
    get.data = NULL;
    sp = qcom_Get(&sts, &qid, &get, qcom_cTmoEternal);  
    if (sp == NULL) continue;
    for (j = 0; j < DATA_SIZE; j++) {
      if (data[j] != *(int *)sp) {
	printf("index...: %d, (%d)\n", j, data[j]);
	break;
      }
      sp += sizeof(int);
    }
//    printf("\nsender..: %d,%X\n", get.sender.nid, get.pid);
//    printf("receiver: %d,%d\n", get.receiver.nid, get.receiver.qix);
//    printf("reply...: %d,%d\n", get.reply.nid, get.reply.qix);
//    printf("type....: %d,%d\n", get.type.b, get.type.s);
//    printf("size....: %d\n", get.size);
//    printf("memcmp..: %d\n", memcmp(get.data, &data, sizeof(data)));
//    printf("index...: %d, (%d)\n", j, data[j]);
    qcom_Free(&sts, get.data);
  }

  qcom_Exit(&sts);
}
예제 #8
0
파일: rt_ini.c 프로젝트: jordibrus/proview
static pwr_tStatus
stop (
  int		argc,
  char		**argv,
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sPut	put;
  char          data[] = "Shutdown you fool!";
/*  qcom_sGet	get;
  char		*bp, *sp;
  int		i;
  int		len;
  int		totlen; */

//  errh_Interactive();

  if (!qcom_Init(&sts, 0, "pwr_ini_stop")) {
//    errh_LogFatal(&cp->log, "qcom_Init, %m", sts);
    exit(sts);
  } 

//  qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart");
//  if (EVEN(sts)) {
//    errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts);
//    exit(sts);
//  }

//  for (i = 0, totlen = 0; i < argc; i++) {
//    len = strlen(argv[i]);
//    totlen += 1 + len;
//    errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]);
//  }
//  bp = malloc(totlen);
//  for (i = 0, sp = bp; i < argc; i++) {
//    len = strlen(argv[i]);
//    memcpy(sp, argv[i], len + 1);
//    sp += len + 1;
// }
  
  qid.qix = 550715;
  qid.nid = 0;
    put.type.b = 11;
    put.type.s = 1;
    put.reply.qix = 0;
    put.reply.nid = 0;
    put.data = data;
    put.size = sizeof(data) + 1;
  qcom_Put(&sts, &qid, &put);

//  while (1) {
//    char *s;

//    get.data = NULL;
//    s = qcom_Get(&sts, &cp->myQ, &get, 100000);
//    if (sts == QCOM__TMO && sts == QCOM__QEMPTY) {
//      break;
//    } else if (s != NULL) {
//      printf("%s\n", s);
//      qcom_Free(NULL, s);
//    }
//    if (get.type.s == 2)
//      break;
//  }

  return 0;
}
예제 #9
0
파일: rt_ini.c 프로젝트: jordibrus/proview
static pwr_tStatus
interactive (
  int		argc,
  char		**argv,
  ini_sContext	*cp
)
{
  pwr_tStatus	sts;
  qcom_sQid	qid;
  qcom_sPut	put;
  qcom_sGet	get;
  char		*bp, *sp;
  int		i;
  int		len;
  int		totlen;

  errh_Interactive();

  if (!qcom_Init(&sts, 0, "pwr_ini_restart")) {
    errh_LogFatal(&cp->log, "qcom_Init, %m", sts);
    exit(sts);
  } 

  qcom_CreateQ(&sts, &cp->myQ, NULL, "pwr_ini_restart");
  if (EVEN(sts)) {
    errh_LogFatal(&cp->log, "qcom_CreateQ, %m", sts);
    exit(sts);
  }

  for (i = 0, totlen = 0; i < argc; i++) {
    len = strlen(argv[i]);
    totlen += 1 + len;
    errh_LogInfo(&cp->log, "argv[%d]: %d \"%s\"", i, len, argv[i]);
  }
  bp = malloc(totlen);
  for (i = 0, sp = bp; i < argc; i++) {
    len = strlen(argv[i]);
    memcpy(sp, argv[i], len + 1);
    sp += len + 1;
  }
  
  qid.qix = 550715;
  qid.nid = 0;
    put.type.b = 10;
    put.type.s = 1;
    put.reply = cp->myQ;
    put.data = bp;
    put.size = totlen;
  qcom_Put(&sts, &qid, &put);

  while (1) {
    char *s;

    get.data = NULL;
    s = qcom_Get(&sts, &cp->myQ, &get, 100000);
    if (sts == QCOM__TMO && sts == QCOM__QEMPTY) {
      break;
    } else if (s != NULL) {
      printf("%s\n", s);
      qcom_Free(NULL, s);
    }
    if (get.type.s == 2)
      break;
  }

  return sts;
}