Changeset c3b25985 in mainline for uspace/srv/net


Ignore:
Timestamp:
2014-08-05T21:43:50Z (11 years ago)
Author:
Agnieszka Tabaka <nufcia@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
ee95794
Parents:
1f1fa64
Message:

Add support for actual MAC change in networking stack.

Location:
uspace/srv/net
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • uspace/srv/net/ethip/ethip.c

    r1f1fa64 rc3b25985  
    5858static int ethip_get_mtu(iplink_srv_t *srv, size_t *mtu);
    5959static int ethip_get_mac48(iplink_srv_t *srv, addr48_t *mac);
     60static int ethip_set_mac48(iplink_srv_t *srv, addr48_t *mac);
    6061static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr);
    6162static int ethip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr);
     
    7071        .get_mtu = ethip_get_mtu,
    7172        .get_mac48 = ethip_get_mac48,
     73        .set_mac48 = ethip_set_mac48,
    7274        .addr_add = ethip_addr_add,
    7375        .addr_remove = ethip_addr_remove
     
    283285}
    284286
     287static int ethip_set_mac48(iplink_srv_t *srv, addr48_t *mac)
     288{
     289        log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_set_mac48()");
     290       
     291        ethip_nic_t *nic = (ethip_nic_t *) srv->arg;
     292        addr48(*mac, nic->mac_addr);
     293       
     294        return EOK;
     295}
     296
    285297static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr)
    286298{
  • uspace/srv/net/ethip/ethip_nic.c

    r1f1fa64 rc3b25985  
    245245            addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]);
    246246
     247        memcpy(&nic->mac_addr, addr, sizeof(nic->mac_addr));
     248
     249        rc = iplink_ev_change_addr(&nic->iplink, &nic->mac_addr);
     250        if (rc != EOK) {
     251                log_msg(LOG_DEFAULT, LVL_DEBUG, "iplink_ev_change_addr() failed");
     252                return;
     253        }
     254
    247255        free(addr);
    248256        async_answer_0(callid, EOK);
  • uspace/srv/net/inetsrv/inet_link.c

    r1f1fa64 rc3b25985  
    5555
    5656static int inet_iplink_recv(iplink_t *, iplink_recv_sdu_t *, ip_ver_t);
     57static int inet_iplink_change_addr(iplink_t *, addr48_t);
    5758static inet_link_t *inet_link_get_by_id_locked(sysarg_t);
    5859
    5960static iplink_ev_ops_t inet_iplink_ev_ops = {
    60         .recv = inet_iplink_recv
     61        .recv = inet_iplink_recv,
     62        .change_addr = inet_iplink_change_addr,
    6163};
    6264
     
    110112       
    111113        return rc;
     114}
     115
     116static int inet_iplink_change_addr(iplink_t *iplink, addr48_t mac)
     117{
     118        log_msg(LOG_DEFAULT, LVL_DEBUG, "inet_iplink_change_addr(): "
     119            "new addr=%02x:%02x:%02x:%02x:%02x:%02x",
     120            mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
     121
     122        list_foreach(inet_links, link_list, inet_link_t, ilink) {
     123                if (ilink->sess == iplink->sess)
     124                        memcpy(&ilink->mac, mac, sizeof(addr48_t));
     125        }
     126
     127        return EOK;
    112128}
    113129
Note: See TracChangeset for help on using the changeset viewer.