Ignore:
File:
1 edited

Legend:

Unmodified
Added
Removed
  • uspace/lib/c/generic/iplink_srv.c

    r25a179e r8d2dd7f2  
    7878                async_answer_0(callid, rc);
    7979       
    80         async_answer_0(iid, rc);
     80        async_answer_0(iid, (sysarg_t) rc);
    8181}
    8282
     
    8989        ipc_callid_t callid;
    9090
     91        rc = async_data_write_receive(&callid, &size);
     92        if (rc != EOK) {
     93                async_answer_0(callid, (sysarg_t) rc);
     94                async_answer_0(iid, (sysarg_t) rc);
     95        }
     96
     97        rc = srv->ops->set_mac48(srv, &mac);
     98        if (rc != EOK) {
     99                async_answer_0(iid, rc);
     100                return;
     101        }
     102       
     103        rc = async_data_read_finalize(callid, &mac, sizeof(addr48_t));
     104        if (rc != EOK)
     105                async_answer_0(callid, rc);
     106       
     107        async_answer_0(iid, (sysarg_t) rc);
     108}
     109
     110static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid,
     111    ipc_call_t *icall)
     112{
     113        ipc_callid_t callid;
     114        size_t size;
    91115        if (!async_data_write_receive(&callid, &size)) {
    92116                async_answer_0(callid, EREFUSED);
    93117                async_answer_0(iid, EREFUSED);
    94         }
    95 
    96         rc = srv->ops->set_mac48(srv, &mac);
    97         if (rc != EOK) {
    98                 async_answer_0(iid, rc);
    99                 return;
    100         }
    101        
    102         rc = async_data_read_finalize(callid, &mac, sizeof(addr48_t));
    103         if (rc != EOK)
    104                 async_answer_0(callid, rc);
    105        
    106         async_answer_0(iid, rc);
    107 }
    108 
    109 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid,
     118                return;
     119        }
     120       
     121        if (size != sizeof(inet_addr_t)) {
     122                async_answer_0(callid, EINVAL);
     123                async_answer_0(iid, EINVAL);
     124                return;
     125        }
     126       
     127        inet_addr_t addr;
     128        int rc = async_data_write_finalize(callid, &addr, size);
     129        if (rc != EOK) {
     130                async_answer_0(callid, (sysarg_t) rc);
     131                async_answer_0(iid, (sysarg_t) rc);
     132        }
     133       
     134        rc = srv->ops->addr_add(srv, &addr);
     135        async_answer_0(iid, (sysarg_t) rc);
     136}
     137
     138static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t iid,
    110139    ipc_call_t *icall)
    111140{
     
    127156        int rc = async_data_write_finalize(callid, &addr, size);
    128157        if (rc != EOK) {
    129                 async_answer_0(callid, rc);
     158                async_answer_0(callid, (sysarg_t) rc);
     159                async_answer_0(iid, (sysarg_t) rc);
     160        }
     161       
     162        rc = srv->ops->addr_remove(srv, &addr);
     163        async_answer_0(iid, (sysarg_t) rc);
     164}
     165
     166static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t iid,
     167    ipc_call_t *icall)
     168{
     169        iplink_sdu_t sdu;
     170       
     171        sdu.src = IPC_GET_ARG1(*icall);
     172        sdu.dest = IPC_GET_ARG2(*icall);
     173       
     174        int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
     175            &sdu.size);
     176        if (rc != EOK) {
    130177                async_answer_0(iid, rc);
    131         }
    132        
    133         rc = srv->ops->addr_add(srv, &addr);
     178                return;
     179        }
     180       
     181        rc = srv->ops->send(srv, &sdu);
     182        free(sdu.data);
    134183        async_answer_0(iid, rc);
    135184}
    136185
    137 static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t iid,
    138     ipc_call_t *icall)
    139 {
     186static void iplink_send6_srv(iplink_srv_t *srv, ipc_callid_t iid,
     187    ipc_call_t *icall)
     188{
     189        iplink_sdu6_t sdu;
     190       
    140191        ipc_callid_t callid;
    141192        size_t size;
     
    146197        }
    147198       
    148         if (size != sizeof(inet_addr_t)) {
    149                 async_answer_0(callid, EINVAL);
    150                 async_answer_0(iid, EINVAL);
    151                 return;
    152         }
    153        
    154         inet_addr_t addr;
    155         int rc = async_data_write_finalize(callid, &addr, size);
    156         if (rc != EOK) {
    157                 async_answer_0(callid, rc);
    158                 async_answer_0(iid, rc);
    159         }
    160        
    161         rc = srv->ops->addr_remove(srv, &addr);
    162         async_answer_0(iid, rc);
    163 }
    164 
    165 static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t iid,
    166     ipc_call_t *icall)
    167 {
    168         iplink_sdu_t sdu;
    169        
    170         sdu.src = IPC_GET_ARG1(*icall);
    171         sdu.dest = IPC_GET_ARG2(*icall);
    172        
    173         int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
    174             &sdu.size);
    175         if (rc != EOK) {
    176                 async_answer_0(iid, rc);
    177                 return;
    178         }
    179        
    180         rc = srv->ops->send(srv, &sdu);
    181         free(sdu.data);
    182         async_answer_0(iid, rc);
    183 }
    184 
    185 static void iplink_send6_srv(iplink_srv_t *srv, ipc_callid_t iid,
    186     ipc_call_t *icall)
    187 {
    188         iplink_sdu6_t sdu;
    189        
    190         ipc_callid_t callid;
    191         size_t size;
    192         if (!async_data_write_receive(&callid, &size)) {
    193                 async_answer_0(callid, EREFUSED);
    194                 async_answer_0(iid, EREFUSED);
    195                 return;
    196         }
    197        
    198199        if (size != sizeof(addr48_t)) {
    199200                async_answer_0(callid, EINVAL);
     
    204205        int rc = async_data_write_finalize(callid, &sdu.dest, size);
    205206        if (rc != EOK) {
    206                 async_answer_0(callid, rc);
    207                 async_answer_0(iid, rc);
     207                async_answer_0(callid, (sysarg_t) rc);
     208                async_answer_0(iid, (sysarg_t) rc);
    208209        }
    209210       
     
    321322        }
    322323       
    323         int retval;
     324        sysarg_t retval;
    324325        async_wait_for(req, &retval);
    325326        if (retval != EOK)
     
    347348        }
    348349       
    349         int retval;
     350        sysarg_t retval;
    350351        async_wait_for(req, &retval);
    351352        if (retval != EOK)
Note: See TracChangeset for help on using the changeset viewer.