Annotation of fwsync/driver/fwsync_workers.c, revision 1.1

1.1     ! misho       1: /*************************************************************************
        !             2: * (C) 2022 CloudSigma AG - Sofia/Bulgaria
        !             3: *  by Michael Pounov <misho@elwix.org>
        !             4: **************************************************************************/
        !             5: #include "fwsync.h"
        !             6: 
        !             7: 
        !             8: static void
        !             9: fwsync_sndpkt(void *context, int pending)
        !            10: {
        !            11:        struct mbuf *m2, *m = (struct mbuf*) context;
        !            12:        int e;
        !            13: 
        !            14:        DTRACE();
        !            15: 
        !            16:        if (fws_cfg.cfg.on & CFG_SYNC_COLLECTOR) {
        !            17:                if ((fws_ctx.config & (CTX_COLLECTOR_2_ONLINE | CTX_COLLECTOR_2_READY)) == 
        !            18:                                (CTX_COLLECTOR_2_ONLINE | CTX_COLLECTOR_2_READY)) {
        !            19:                        m2 = m_copypacket(m, M_NOWAIT);
        !            20:                        if (!m2) {
        !            21:                                printf("error in copypacket for second collector\n");
        !            22:                                goto out;
        !            23:                        }
        !            24:                        e = sosend(fws_ctx.sockz[CFG_SYNC_ADDR_COLLECTOR_2], 
        !            25:                                        &fws_cfg.cfg_addr[CFG_SYNC_ADDR_COLLECTOR_2].addr, NULL, 
        !            26:                                        m2, NULL, 0, curthread);
        !            27:                        if (e != EAGAIN)
        !            28:                                printf("error in collector %d handler #%d\n", CFG_SYNC_ADDR_COLLECTOR_2, e);
        !            29:                }
        !            30: 
        !            31:                if ((fws_ctx.config & (CTX_COLLECTOR_1_ONLINE | CTX_COLLECTOR_1_READY)) == 
        !            32:                                (CTX_COLLECTOR_1_ONLINE | CTX_COLLECTOR_1_READY)) {
        !            33:                        m2 = m_copypacket(m, M_NOWAIT);
        !            34:                        if (!m2) {
        !            35:                                printf("error in copypacket for first collector\n");
        !            36:                                goto out;
        !            37:                        }
        !            38:                        e = sosend(fws_ctx.sockz[CFG_SYNC_ADDR_COLLECTOR_1], 
        !            39:                                        &fws_cfg.cfg_addr[CFG_SYNC_ADDR_COLLECTOR_1].addr, NULL, 
        !            40:                                        m2, NULL, 0, curthread);
        !            41:                        if (e != EAGAIN)
        !            42:                                printf("error in collector %d handler #%d\n", CFG_SYNC_ADDR_COLLECTOR_1, e);
        !            43:                }
        !            44:        }
        !            45: out:
        !            46:        m_freem(m);
        !            47: 
        !            48: }
        !            49: 
        !            50: int
        !            51: fwsync_state_handler(const void *arg)
        !            52: {
        !            53:        const struct ipfw_flow_id *pkt = arg;
        !            54:        struct fws_proto *spkt;
        !            55:        struct mbuf *m;
        !            56: 
        !            57:        DTRACE();
        !            58: 
        !            59:        if (pkt->addr_type == 1)
        !            60:                return 0;       /* skip ethernet packet */
        !            61: 
        !            62:        m = m_gethdr(M_WAITOK, MT_DATA);
        !            63:        if (!m)
        !            64:                return ENOMEM;
        !            65:        else {
        !            66:                spkt = mtod(m, struct fws_proto *);
        !            67:                m->m_len = sizeof(struct fws_proto);
        !            68:                m_fixhdr(m);
        !            69:        }
        !            70: 
        !            71:        spkt->fws_version = FWS_PKTVER_STATE;
        !            72:        spkt->fws_fib = pkt->fib;
        !            73:        spkt->fws_proto = pkt->proto;
        !            74:        spkt->fws_addrtype = pkt->addr_type;
        !            75:        spkt->fws_sport = pkt->src_port;
        !            76:        spkt->fws_dport = pkt->dst_port;
        !            77: 
        !            78:        switch (pkt->addr_type) {
        !            79:                case 4:
        !            80:                        spkt->fws_saddr.s_addr = pkt->src_ip;
        !            81:                        spkt->fws_daddr.s_addr = pkt->dst_ip;
        !            82:                        spkt->fws_scopeid = 0;
        !            83:                        break;
        !            84:                case 6:
        !            85:                        memcpy(&spkt->fws_saddr6, &pkt->src_ip6, sizeof spkt->fws_saddr6);
        !            86:                        memcpy(&spkt->fws_daddr6, &pkt->dst_ip6, sizeof spkt->fws_daddr6);
        !            87:                        spkt->fws_scopeid = pkt->flow_id6;
        !            88:                        break;
        !            89:                default:
        !            90:                        m_free(m);
        !            91:                        return 0;
        !            92:        }
        !            93: 
        !            94:        TASK_INIT(&fws_sndpkt_task, 0, fwsync_sndpkt, m);
        !            95:        taskqueue_enqueue(taskqueue_thread, &fws_sndpkt_task);
        !            96:        return 0;
        !            97: }
        !            98: 
        !            99: int
        !           100: fwsync_alias_handler(const void *arg)
        !           101: {
        !           102:        DTRACE();
        !           103: 
        !           104:        return 0;
        !           105: }

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>