Ignore:
File:
1 edited

Legend:

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

    ra17356fd r02a09ed  
    5050}
    5151
    52 static void iplink_get_mac48_srv(iplink_srv_t *srv, ipc_callid_t iid,
     52static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid,
    5353    ipc_call_t *icall)
    5454{
    55         addr48_t mac;
    56         int rc = srv->ops->get_mac48(srv, &mac);
    57         if (rc != EOK) {
    58                 async_answer_0(iid, rc);
    59                 return;
    60         }
    61        
    6255        ipc_callid_t callid;
    6356        size_t size;
    64         if (!async_data_read_receive(&callid, &size)) {
    65                 async_answer_0(callid, EREFUSED);
    66                 async_answer_0(iid, EREFUSED);
    67                 return;
    68         }
    69        
    70         if (size != sizeof(addr48_t)) {
    71                 async_answer_0(callid, EINVAL);
    72                 async_answer_0(iid, EINVAL);
    73                 return;
    74         }
    75        
    76         rc = async_data_read_finalize(callid, &mac, size);
    77         if (rc != EOK)
    78                 async_answer_0(callid, rc);
    79        
     57        if (!async_data_write_receive(&callid, &size)) {
     58                async_answer_0(callid, EREFUSED);
     59                async_answer_0(iid, EREFUSED);
     60                return;
     61        }
     62       
     63        if (size != sizeof(inet_addr_t)) {
     64                async_answer_0(callid, EINVAL);
     65                async_answer_0(iid, EINVAL);
     66                return;
     67        }
     68       
     69        inet_addr_t addr;
     70        int rc = async_data_write_finalize(callid, &addr, size);
     71        if (rc != EOK) {
     72                async_answer_0(callid, (sysarg_t) rc);
     73                async_answer_0(iid, (sysarg_t) rc);
     74        }
     75       
     76        rc = srv->ops->addr_add(srv, &addr);
    8077        async_answer_0(iid, (sysarg_t) rc);
    8178}
    8279
    83 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid,
     80static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t iid,
    8481    ipc_call_t *icall)
    8582{
     
    105102        }
    106103       
    107         rc = srv->ops->addr_add(srv, &addr);
     104        rc = srv->ops->addr_remove(srv, &addr);
    108105        async_answer_0(iid, (sysarg_t) rc);
    109106}
    110107
    111 static void iplink_addr_remove_srv(iplink_srv_t *srv, ipc_callid_t iid,
     108static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t iid,
    112109    ipc_call_t *icall)
    113110{
     111        iplink_sdu_t sdu;
     112       
    114113        ipc_callid_t callid;
    115114        size_t size;
     
    126125        }
    127126       
    128         inet_addr_t addr;
    129         int rc = async_data_write_finalize(callid, &addr, size);
    130         if (rc != EOK) {
    131                 async_answer_0(callid, (sysarg_t) rc);
    132                 async_answer_0(iid, (sysarg_t) rc);
    133         }
    134        
    135         rc = srv->ops->addr_remove(srv, &addr);
    136         async_answer_0(iid, (sysarg_t) rc);
    137 }
    138 
    139 static void iplink_send_srv(iplink_srv_t *srv, ipc_callid_t iid,
    140     ipc_call_t *icall)
    141 {
    142         iplink_sdu_t sdu;
    143        
    144         sdu.src = IPC_GET_ARG1(*icall);
    145         sdu.dest = IPC_GET_ARG2(*icall);
    146        
    147         int rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
    148             &sdu.size);
    149         if (rc != EOK) {
    150                 async_answer_0(iid, rc);
    151                 return;
    152         }
    153        
    154         rc = srv->ops->send(srv, &sdu);
    155         free(sdu.data);
    156         async_answer_0(iid, rc);
    157 }
    158 
    159 static void iplink_send6_srv(iplink_srv_t *srv, ipc_callid_t iid,
    160     ipc_call_t *icall)
    161 {
    162         iplink_sdu6_t sdu;
    163        
    164         ipc_callid_t callid;
    165         size_t size;
    166         if (!async_data_write_receive(&callid, &size)) {
    167                 async_answer_0(callid, EREFUSED);
    168                 async_answer_0(iid, EREFUSED);
    169                 return;
    170         }
    171        
    172         if (size != sizeof(addr48_t)) {
    173                 async_answer_0(callid, EINVAL);
    174                 async_answer_0(iid, EINVAL);
    175                 return;
    176         }
    177        
    178         int rc = async_data_write_finalize(callid, &sdu.dest, size);
     127        int rc = async_data_write_finalize(callid, &sdu.src, size);
     128        if (rc != EOK) {
     129                async_answer_0(callid, (sysarg_t) rc);
     130                async_answer_0(iid, (sysarg_t) rc);
     131        }
     132       
     133        if (!async_data_write_receive(&callid, &size)) {
     134                async_answer_0(callid, EREFUSED);
     135                async_answer_0(iid, EREFUSED);
     136                return;
     137        }
     138       
     139        if (size != sizeof(inet_addr_t)) {
     140                async_answer_0(callid, EINVAL);
     141                async_answer_0(iid, EINVAL);
     142                return;
     143        }
     144       
     145        rc = async_data_write_finalize(callid, &sdu.dest, size);
    179146        if (rc != EOK) {
    180147                async_answer_0(callid, (sysarg_t) rc);
     
    184151        rc = async_data_write_accept(&sdu.data, false, 0, 0, 0,
    185152            &sdu.size);
    186         if (rc != EOK) {
    187                 async_answer_0(iid, rc);
    188                 return;
    189         }
    190        
    191         rc = srv->ops->send6(srv, &sdu);
     153        if (rc != EOK)
     154                return;
     155       
     156        rc = srv->ops->send(srv, &sdu);
    192157        free(sdu.data);
    193158        async_answer_0(iid, rc);
     
    205170int iplink_conn(ipc_callid_t iid, ipc_call_t *icall, void *arg)
    206171{
    207         iplink_srv_t *srv = (iplink_srv_t *) arg;
     172        iplink_srv_t *srv = (iplink_srv_t *)arg;
    208173        int rc;
    209174       
     
    249214                        iplink_get_mtu_srv(srv, callid, &call);
    250215                        break;
    251                 case IPLINK_GET_MAC48:
    252                         iplink_get_mac48_srv(srv, callid, &call);
    253                         break;
    254216                case IPLINK_SEND:
    255217                        iplink_send_srv(srv, callid, &call);
    256                         break;
    257                 case IPLINK_SEND6:
    258                         iplink_send6_srv(srv, callid, &call);
    259218                        break;
    260219                case IPLINK_ADDR_ADD:
Note: See TracChangeset for help on using the changeset viewer.