📄 test-m2pa.c
字号:
return UNKNOWN; case N_BIND_ACK: if ( verbose ) { printf(" !bind ack \n"); printf(" cons = %lu\n",p->npi.bind_ack.CONIND_number); printf(" tok = %lx\n",p->npi.bind_ack.TOKEN_value); printf(" alen = %lu\n",p->npi.bind_ack.ADDR_length); if ( p->npi.bind_ack.ADDR_length == 14 ) { addr_t *a = (addr_t *)(buf+p->npi.bind_ack.ADDR_offset); printf(" port = %u\n",ntohs(a->port)); printf(" add1 = %d.%d.%d.%d\n", (a->addr[0]>> 0)&0xff, (a->addr[0]>> 8)&0xff, (a->addr[0]>>16)&0xff, (a->addr[0]>>24)&0xff); printf(" add2 = %d.%d.%d.%d\n", (a->addr[1]>> 0)&0xff, (a->addr[1]>> 8)&0xff, (a->addr[1]>>16)&0xff, (a->addr[1]>>24)&0xff); printf(" add3 = %d.%d.%d.%d\n", (a->addr[2]>> 0)&0xff, (a->addr[2]>> 8)&0xff, (a->addr[2]>>16)&0xff, (a->addr[2]>>24)&0xff); } FFLUSH(stdout); } iut_tok = p->npi.bind_ack.TOKEN_value; return BIND_ACK; case N_ERROR_ACK: if ( verbose ) { printf(" !error ack \n"); FFLUSH(stdout); } return ERROR_ACK; case N_OK_ACK: if ( verbose ) { printf(" !ok ack \n"); FFLUSH(stdout); } return OK_ACK; case N_UNITDATA_IND: if ( verbose ) { printf(" !unitdata ind \n"); FFLUSH(stdout); } return UNKNOWN; case N_UDERROR_IND: if ( verbose ) { printf(" !uderror ind \n"); FFLUSH(stdout); } return UNKNOWN; case N_DATACK_IND: if ( verbose ) { printf(" !datack ind \n"); FFLUSH(stdout); } return UNKNOWN; case N_RESET_IND: if ( verbose ) { printf(" !reset ind \n"); FFLUSH(stdout); } return UNKNOWN; case N_RESET_CON: if ( verbose ) { printf(" !reset con \n"); FFLUSH(stdout); } return UNKNOWN; default: printf(" !(unknown %5ld) \n",p->sl.sl_primitive); FFLUSH(stdout); return UNKNOWN; }}/* * ------------------------------------------------------------------------- * * Decode data at Management Stream * * ------------------------------------------------------------------------- */static int mgm_decode_data(void){ printf(" !data | \n"); FFLUSH(stdout); return UNKNOWN;}/* * ------------------------------------------------------------------------- * * Decode ctrl at Management Stream * * ------------------------------------------------------------------------- */static int mgm_decode_msg(unsigned char *buf){ union primitives *p = (union primitives *)buf; if ( p->npi.type != oldmgm ) { oldmgm = p->npi.type; cntmgm = 0; } else if ( !expand ) cntmgm++; switch ( p->prim ) { case N_CONN_IND: if ( verbose ) { printf(" !conn ind | \n"); FFLUSH(stdout); } mgm_seq = p->npi.conn_ind.SEQ_number; return CONN_IND; case N_CONN_CON: if ( verbose ) { printf(" !conn con | \n"); FFLUSH(stdout); } return UNKNOWN; case N_DISCON_IND: if ( verbose ) { printf(" !discon ind | \n"); FFLUSH(stdout); } return DISCON_IND; case N_INFO_ACK: if ( verbose ) { printf(" !info ack | \n"); FFLUSH(stdout); } return UNKNOWN; case N_BIND_ACK: if ( verbose ) { printf(" !bind ack | \n"); printf(" cons = %lu\n",p->npi.bind_ack.CONIND_number); printf(" tok = %lx\n",p->npi.bind_ack.TOKEN_value); printf(" alen = %lu\n",p->npi.bind_ack.ADDR_length); if ( p->npi.bind_ack.ADDR_length == 14 ) { addr_t *a = (addr_t *)(buf+p->npi.bind_ack.ADDR_offset); printf(" port = %u\n",ntohs(a->port)); printf(" add1 = %d.%d.%d.%d\n", (a->addr[0]>> 0)&0xff, (a->addr[0]>> 8)&0xff, (a->addr[0]>>16)&0xff, (a->addr[0]>>24)&0xff); printf(" add2 = %d.%d.%d.%d\n", (a->addr[1]>> 0)&0xff, (a->addr[1]>> 8)&0xff, (a->addr[1]>>16)&0xff, (a->addr[1]>>24)&0xff); printf(" add3 = %d.%d.%d.%d\n", (a->addr[2]>> 0)&0xff, (a->addr[2]>> 8)&0xff, (a->addr[2]>>16)&0xff, (a->addr[2]>>24)&0xff); } FFLUSH(stdout); } mgm_tok = p->npi.bind_ack.TOKEN_value; return BIND_ACK; case N_ERROR_ACK: if ( verbose ) { printf(" !error ack | \n"); FFLUSH(stdout); } return ERROR_ACK; case N_OK_ACK: if ( verbose ) { printf(" !ok ack | \n"); FFLUSH(stdout); } return OK_ACK; case N_UNITDATA_IND: if ( verbose ) { printf(" !unitdata ind | \n"); FFLUSH(stdout); } return UNKNOWN; case N_UDERROR_IND: if ( verbose ) { printf(" !uderror ind | \n"); FFLUSH(stdout); } return UNKNOWN; case N_DATACK_IND: if ( verbose ) { printf(" !datack ind | \n"); FFLUSH(stdout); } return UNKNOWN; case N_RESET_IND: if ( verbose ) { printf(" !reset ind | \n"); FFLUSH(stdout); } return UNKNOWN; case N_RESET_CON: if ( verbose ) { printf(" !reset con | \n"); FFLUSH(stdout); } return UNKNOWN; default: printf(" !(uninown %5ld) | \n",p->npi.type); FFLUSH(stdout); return UNKNOWN; }}/* * ========================================================================= * * EVENT HANDLING * * ========================================================================= */static int show_timeout = 0;/* * ------------------------------------------------------------------------- * * Wait for message or timeout. * * ------------------------------------------------------------------------- */static int wait_event(int wait){ while (1) { struct pollfd pfd[] = { { pt_fd, POLLIN|POLLPRI, 0 }, { iut_fd, POLLIN|POLLPRI, 0 }, { mgm_fd, POLLIN|POLLPRI, 0 } }; if ( timer_timeout ) { timer_timeout = 0; if ( show_timeout || verbose ) { printf(" -----timeout------ \n"); FFLUSH(stdout); if ( show_timeout ) show_timeout--; } return TIMEOUT; } if ( debug && verbose ) { printf(" ......polling..... \n"); FFLUSH(stdout); } switch ( poll(pfd, 3, wait) ) { case -1: if ( debug && verbose ) { printf(" = = = ERROR = = = \n"); FFLUSH(stdout); } break; case 0: if ( debug && verbose ) { printf(" + + +nothing + + + \n"); FFLUSH(stdout); } return NO_MSG; case 1: case 2: case 3: if ( debug && verbose ) { printf(" ^^^^^^polled^^^^^^ \n"); FFLUSH(stdout); } if ( pfd[0].revents & (POLLIN|POLLPRI|POLLERR|POLLHUP) ) { int ret = UNKNOWN; int flags = 0; unsigned char cbuf[BUFSIZE]; struct strbuf ctrl = { BUFSIZE, 0, cbuf }, data = { BUFSIZE, 0, pt_buf }; if ( debug && verbose ) { printf("pt getmsg... \n"); FFLUSH(stdout); } if ( getmsg(pt_fd, &ctrl, &data, &flags) < 0 ) { printf("****ERROR: pt getmsg failed\n"); printf(" %s: %s\n",__FUNCTION__,strerror(errno)); FFLUSH(stdout); return NO_MSG; } else { if ( debug && verbose ) { printf("pt gotmsg... [%2d,%2d] \n",ctrl.len,data.len); FFLUSH(stdout); } if ( ctrl.len > 0 && (ret = pt_decode_msg(ctrl.buf)) != UNKNOWN ) return ret; if ( data.len > 0 && (ret = pt_decode_data()) != UNKNOWN ) return ret; } } if ( pfd[1].revents & (POLLIN|POLLPRI|POLLERR|POLLHUP) ) { int ret = UNKNOWN; int flags = 0; unsigned char cbuf[BUFSIZE]; struct strbuf ctrl = { BUFSIZE, 0, cbuf }, data = { BUFSIZE, 0, iut_buf }; if ( debug && verbose ) { printf(" iut getmsg \n"); FFLUSH(stdout); } if ( getmsg(iut_fd, &ctrl, &data, &flags) < 0 ) { printf(" ****ERROR: iut getmsg failed\n"); printf(" %s: %s\n",__FUNCTION__,strerror(errno)); FFLUSH(stdout); return NO_MSG; } else { if ( debug && verbose ) { printf(" iut gotmsg [%2d,%2d] \n",ctrl.len,data.len); FFLUSH(stdout); } if ( ctrl.len > 0 && (ret = iut_decode_msg(ctrl.buf)) != UNKNOWN ) return ret; if ( data.len > 0 && (ret = iut_decode_data()) != UNKNOWN ) return ret; } } if ( pfd[2].revents & (POLLIN|POLLPRI|POLLERR|POLLHUP) ) { int ret = UNKNOWN; int flags = 0; unsigned char cbuf[BUFSIZE]; struct strbuf ctrl = { BUFSIZE, 0, cbuf }, data = { BUFSIZE, 0, mgm_buf }; if ( debug && verbose ) { printf(" mgm getmsg... \n"); FFLUSH(stdout); } if ( getmsg(mgm_fd, &ctrl, &data, &flags) < 0 ) { printf(" ****ERROR: mgm getmsg failed\n"); printf(" %s: %s\n",__FUNCTION__,strerror(errno)); FFLUSH(stdout); return NO_MSG; } else { if ( debug && verbose ) { printf(" mgm gotmsg... [%2d,%2d] \n",ctrl.len,data.len); FFLUSH(stdout); } if ( ctrl.len > 0 && (ret = mgm_decode_msg(ctrl.buf)) != UNKNOWN ) return ret; if ( data.len > 0 && (ret = mgm_decode_data()) != UNKNOWN ) return ret; } } default: break; } }}static int event(void){ return wait_event(-1);}/* * ========================================================================= * * The test cases... * * ========================================================================= */#if 0static int check_snibs(unsigned char bsnib, unsigned char fsnib){ printf(" check b/f sn/ib: ---> (%02x/%02x)\n", bsnib, fsnib); FFLUSH(stdout); if ( (iut_bib|iut_bsn) == bsnib && (iut_fib|iut_fsn) == fsnib ) return SUCCESS; return FAILURE;}#endifstatic int test_1_1a(void){ for (;;) { switch ( state ) { case 0: send(POWER_ON); send(OUT_OF_SERVICE); signal(POWER_ON); state = 1; break; case 1: switch ( event() ) { case OUT_OF_SERVICE: return SUCCESS; default: return FAILURE; } break; default: ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -