void mopPutHeader(u_char *pkt, int *idx, u_char *dst, u_char *src, u_short proto, int trans) { mopPutMulti(pkt, idx, dst, 6); mopPutMulti(pkt, idx, src, 6); if (trans == TRANS_8023) { mopPutShort(pkt, idx, 0); mopPutChar(pkt, idx, MOP_K_PROTO_802_DSAP); mopPutChar(pkt, idx, MOP_K_PROTO_802_SSAP); mopPutChar(pkt, idx, MOP_K_PROTO_802_CNTL); mopPutChar(pkt, idx, 0x08); mopPutChar(pkt, idx, 0x00); mopPutChar(pkt, idx, 0x2b); } #if !defined(__FreeBSD__) mopPutNShort(pkt, idx, proto); #else if (trans == TRANS_8023) { mopPutNShort(pkt, idx, proto); } else { mopPutShort(pkt, idx, proto); } #endif if (trans == TRANS_ETHER) mopPutShort(pkt, idx, 0); }
void mopPutLength(u_char *pkt, int trans, u_short len) { int idx = 0; switch(trans) { case TRANS_ETHER: idx = 14; mopPutChar(pkt, &idx, ((len - 16) % 256)); mopPutChar(pkt, &idx, ((len - 16) / 256)); break; case TRANS_8023: idx = 12; #if !defined(__FreeBSD__) mopPutChar(pkt, &idx, ((len - 14) / 256)); mopPutChar(pkt, &idx, ((len - 14) % 256)); #else mopPutChar(pkt, &idx, ((len - 14) % 256)); mopPutChar(pkt, &idx, ((len - 14) / 256)); #endif break; } }
void mopPutTime(u_char *pkt, int *idx, time_t value) { time_t tnow; struct tm *timenow; if (value == 0) { tnow = time(NULL); } else { tnow = value; } timenow = localtime(&tnow); mopPutChar (pkt,idx,10); mopPutChar (pkt,idx,(timenow->tm_year / 100) + 19); mopPutChar (pkt,idx,(timenow->tm_year % 100)); mopPutChar (pkt,idx,(timenow->tm_mon + 1)); mopPutChar (pkt,idx,(timenow->tm_mday)); mopPutChar (pkt,idx,(timenow->tm_hour)); mopPutChar (pkt,idx,(timenow->tm_min)); mopPutChar (pkt,idx,(timenow->tm_sec)); mopPutChar (pkt,idx,0x00); mopPutChar (pkt,idx,0x00); mopPutChar (pkt,idx,0x00); }