Example #1
0
int main(void)
{
    /* Implementation of basic Net API */
    NetClientInfo nc_info;
    nc_info.can_receive = nc_open_eth_can_receive;
    nc_info.receive = nc_open_eth_receive;
    nc_info.link_status_changed = nc_open_eth_set_link_status;

    /* NIC which can receive but not transmit packets */
    NICState nic;
    nic.nc.info = &nc_info;
    nic.nc.link_down = 0;
    nic.nc.peer = NULL;
    nic.nc.receive_disabled = 0;

    /* Interrupt handler for incoming packets */
    IRQState irq;
    irq.n = 3;
    irq.handler = rx_handler;

    /* Ethernet MAC hardware model */
    OpenEthState eth;
    eth.nic = &nic;
    eth.irq = &irq;
    eth.mii.link_ok = true;

#ifdef CONCRETE_EXECUTION
    memset(eth.mii.regs, 0, sizeof(eth.mii.regs));
#endif
    eth.mii.regs[MII_BMCR]=0;
    eth.mii.regs[MII_BMSR]=0;
    eth.mii.regs[MII_PHYIDR1]=0;
    eth.mii.regs[MII_PHYIDR2]=0;
    eth.mii.regs[MII_ANAR]=0;
    eth.mii.regs[MII_ANLPAR]=0;
#ifdef CONCRETE_EXECUTION
    memset(eth.regs, 0, sizeof(eth.regs));
#endif
    eth.regs[MODER]=0;
    eth.regs[INT_SOURCE]=0;
    eth.regs[INT_MASK]=0;
    eth.regs[IPGT]=0;
    eth.regs[IPGR1]=0;
    eth.regs[IPGR2]=0;
    eth.regs[PACKETLEN]=0;
    eth.regs[COLLCONF]=0;
    eth.regs[TX_BD_NUM]=0;
    eth.regs[CTRLMODER]=0;
    eth.regs[MIIMODER]=0;
    eth.regs[MIICOMMAND]=0;
    eth.regs[MIIADDRESS]=0;
    eth.regs[MIITX_DATA]=0;
    eth.regs[MIIRX_DATA]=0;
    eth.regs[MIISTATUS]=0;
    eth.regs[MAC_ADDR0]=0;
    eth.regs[MAC_ADDR1]=0;
    eth.regs[HASH0]=0;
    eth.regs[HASH1]=0;
    eth.regs[TXCTRL]=0;
#ifdef CONCRETE_EXECUTION
    memset(eth.desc, 0, sizeof(eth.desc));
#endif
    eth.desc[0].buf_ptr=0;
    eth.desc[1].buf_ptr=0;
    eth.desc[2].buf_ptr=0;
    eth.desc[3].buf_ptr=0;
    eth.desc[4].buf_ptr=0;
    eth.desc[5].buf_ptr=0;
    eth.desc[6].buf_ptr=0;
    eth.desc[7].buf_ptr=0;
    eth.desc[0].len_flags=0;
    eth.desc[1].len_flags=0;
    eth.desc[2].len_flags=0;
    eth.desc[3].len_flags=0;
    eth.desc[4].len_flags=0;
    eth.desc[5].len_flags=0;
    eth.desc[6].len_flags=0;
    eth.desc[7].len_flags=0;

    nic.opaque = ð
    nc = &nic.nc;

#ifdef ETHOC_BENCHMARK_PROP_2
    test_init();
#endif
#ifdef ETHOC_BENCHMARK_PROP_3
    test_rx();
#endif
#ifdef ETHOC_BENCHMARK_PROP_4
    test_rx_busy();
#endif
}
Example #2
0
/*
 * All tests are expected to pass except the last assertion
 * about `raised_irq` in `test_rx` when _CBMC_ is enabled.
 */
int main(void)
{
    /* Implementation of basic Net API */
    NetClientInfo nc_info;
    nc_info.link_status_changed = nc_open_eth_set_link_status;

    /* NIC which can receive but not transmit packets */
    NICState nic;
    nic.nc.info = &nc_info;
    nic.nc.link_down = 0;
    nic.nc.receive_disabled = 0;

    /* Interrupt handler for incoming packets */
    IRQState irq;
    irq.n = 3;
    irq.handler = rx_handler;
    irq.threads_counter = 0;

#ifndef _CBMC_
    pthread_mutex_init(&irq.threads_counter_lock, NULL);
#endif

    /* Ethernet MAC hardware model */
    OpenEthState eth;
    eth.nic = &nic;
    eth.irq = &irq;
    eth.mii.link_ok = true;

#ifndef _CBMC_
    /*
     * We avoid the need for reentrant locks (i.e. PTHREAD_MUTEX_RECURSIVE lock
     * attribute) by specifying the expected behaviour of callbacks in "net.h".
     */
    pthread_mutex_init(&eth.lock, NULL);
#endif

    memset(eth.mii.regs, 0, sizeof(eth.mii.regs));
    eth.mii.regs[MII_BMCR]=0;
    eth.mii.regs[MII_BMSR]=0;
    eth.mii.regs[MII_PHYIDR1]=0;
    eth.mii.regs[MII_PHYIDR2]=0;
    eth.mii.regs[MII_ANAR]=0;
    eth.mii.regs[MII_ANLPAR]=0;
    memset(eth.regs, 0, sizeof(eth.regs));
    eth.regs[MODER]=0;
    eth.regs[INT_SOURCE]=0;
    eth.regs[INT_MASK]=0;
    eth.regs[IPGT]=0;
    eth.regs[IPGR1]=0;
    eth.regs[IPGR2]=0;
    eth.regs[PACKETLEN]=0;
    eth.regs[COLLCONF]=0;
    eth.regs[TX_BD_NUM]=0;
    eth.regs[CTRLMODER]=0;
    eth.regs[MIIMODER]=0;
    eth.regs[MIICOMMAND]=0;
    eth.regs[MIIADDRESS]=0;
    eth.regs[MIITX_DATA]=0;
    eth.regs[MIIRX_DATA]=0;
    eth.regs[MIISTATUS]=0;
    eth.regs[MAC_ADDR0]=0;
    eth.regs[MAC_ADDR1]=0;
    eth.regs[HASH0]=0;
    eth.regs[HASH1]=0;
    eth.regs[TXCTRL]=0;
    memset(eth.desc, 0, sizeof(eth.desc));
    eth.desc[0].buf_ptr=0;
    eth.desc[1].buf_ptr=0;
    eth.desc[2].buf_ptr=0;
    eth.desc[3].buf_ptr=0;
    eth.desc[4].buf_ptr=0;
    eth.desc[5].buf_ptr=0;
    eth.desc[6].buf_ptr=0;
    eth.desc[7].buf_ptr=0;
    eth.desc[0].len_flags=0;
    eth.desc[1].len_flags=0;
    eth.desc[2].len_flags=0;
    eth.desc[3].len_flags=0;
    eth.desc[4].len_flags=0;
    eth.desc[5].len_flags=0;
    eth.desc[6].len_flags=0;
    eth.desc[7].len_flags=0;

    nic.opaque = ð
    nc = &nic.nc;

#ifdef _ETHOC_TEST_1_
    test_init();
#endif
#ifdef _ETHOC_TEST_2_
    test_can_receive();
#endif
#ifdef _ETHOC_TEST_3_
    test_rx();
#elif _ETHOC_TEST_5_
    test_rx();
#endif
#ifdef _ETHOC_TEST_4_
    test_rx_busy();
#endif
}