コード例 #1
0
ファイル: dtcp.c プロジェクト: shinrs20/stack
static int populate_ctrl_pci(struct pci *  pci,
                             struct dtcp * dtcp)
{
        struct dtcp_config * dtcp_cfg;
        seq_num_t snd_lft;
        seq_num_t snd_rt;
        seq_num_t LWE;

        dtcp_cfg = dtcp_config_get(dtcp);
        if (!dtcp_cfg) {
                LOG_ERR("No dtcp cfg...");
                return -1;
        }

        /*
         * FIXME: Shouldn't we check if PDU_TYPE_ACK_AND_FC or
         * PDU_TYPE_NACK_AND_FC ?
         */
        LWE = dt_sv_rcv_lft_win(dtcp->parent);
        if (dtcp_flow_ctrl(dtcp_cfg)) {
                if (dtcp_window_based_fctrl(dtcp_cfg)) {
                        snd_lft = snd_lft_win(dtcp);
                        snd_rt  = snd_rt_wind_edge(dtcp);

                        pci_control_new_left_wind_edge_set(pci, LWE);
                        pci_control_new_rt_wind_edge_set(pci,
                                                         rcvr_rt_wind_edge(dtcp));
                        pci_control_my_left_wind_edge_set(pci, snd_lft);
                        pci_control_my_rt_wind_edge_set(pci, snd_rt);
                }

                if (dtcp_rate_based_fctrl(dtcp_cfg)) {
                        LOG_MISSING;
                }
        }

        switch (pci_type(pci)) {
        case PDU_TYPE_ACK_AND_FC:
        case PDU_TYPE_ACK:
                if (pci_control_ack_seq_num_set(pci, LWE)) {
                        LOG_ERR("Could not set sn to ACK");
                        return -1;
                }
                return 0;
        case PDU_TYPE_NACK_AND_FC:
        case PDU_TYPE_NACK:
                if (pci_control_ack_seq_num_set(pci, LWE + 1)) {
                        LOG_ERR("Could not set sn to NACK");
                        return -1;
                }
                return 0;
        default:
                break;
        }

        return 0;
}
コード例 #2
0
ファイル: serdes.c プロジェクト: msune/irati
static int deserialize_ack_pci(const struct serdes * instance,
                               struct pci *          new_pci,
                               int *                 offset,
                               const uint8_t *       ptr)
{
        seq_num_t        seq;
        struct dt_cons * dt_cons;

        ASSERT(instance);
        ASSERT(new_pci);
        ASSERT(offset);
        ASSERT(ptr);

        dt_cons = instance->dt_cons;
        ASSERT(dt_cons);

        seq = 0;

        memcpy(&seq, ptr + *offset, dt_cons->seq_num_length);
        *offset += dt_cons->seq_num_length;
        if (pci_control_ack_seq_num_set(new_pci, seq))
                return -1;

        return 0;
}