コード例 #1
0
ファイル: networking.c プロジェクト: atiselsts/osw
// send smth to address 'addr', port 'port' 
void networkingForwardData(MacInfo_t *macInfo, uint8_t *data, uint16_t len) {
    // PRINTF("commForwardData, len=%u\n", len);
    
    switch (routePacket(macInfo)) {
    case RD_DROP:
        // PRINTF("RD_DROP\n");
        if (IS_LOCAL(macInfo)){
            INC_NETSTAT(NETSTAT_PACKETS_DROPPED_TX, EMPTY_ADDR);
        } else{
            INC_NETSTAT(NETSTAT_PACKETS_DROPPED_RX, EMPTY_ADDR);
        }
        break;

    case RD_LOCAL:
        // PRINTF("RD_LOCAL\n");
        socketInputData(macInfo, data, len);
        break;

    case RD_UNICAST:
        // PRINTF("RD_UNICAST\n");
        // force header rebuild
        macInfo->macHeaderLen = 0;
#if PLATFORM_SADMOTE
        if (!IS_LOCAL(macInfo) && isDuplicate(macInfo, data, len)) {
            PRINTF("not forwarding, duplicate...\n");
            break;
        }
#endif
        if (IS_LOCAL(macInfo)) {
            INC_NETSTAT(NETSTAT_PACKETS_SENT, macInfo->originalDst.shortAddr);
        }
        macSendEx(macInfo, data, len);
        break;

    case RD_BROADCAST:
        // PRINTF("RD_BROADCAST\n");
        if (!IS_LOCAL(macInfo)) {
            socketInputData(macInfo, data, len);
        }
        // and forward to all
        intToAddr(macInfo->originalDst, OSW_ADDR_BROADCAST);
        // force header rebuild
        macInfo->macHeaderLen = 0;
        INC_NETSTAT(NETSTAT_PACKETS_SENT, EMPTY_ADDR);
        macSendEx(macInfo, data, len);
        break;
    }
}
コード例 #2
0
ファイル: mac.c プロジェクト: KuanYuChen/mansos
int8_t macSend(MosAddr *dst, const uint8_t *data, uint16_t length) {
    static MacInfo_t mi;
    memset(&mi, 0, sizeof(mi));
    fillLocalAddress(&mi.originalSrc);
    if (dst) {
        memcpy(&mi.originalDst, dst, sizeof(MosAddr));
    } else {
        mi.originalDst.shortAddr = MOS_ADDR_BROADCAST;
    }
    return macSendEx(&mi, data, length);
}