Changes in / [c62a8275:f93ba6d] in mainline
- Location:
- uspace
- Files:
-
- 12 edited
Legend:
- Unmodified
- Added
- Removed
-
uspace/app/nic/nic.c
rc62a8275 rf93ba6d 49 49 nic_cable_state_t link_state; 50 50 nic_channel_mode_t duplex; 51 nic_unicast_mode_t unicast_mode;52 nic_multicast_mode_t multicast_mode;53 nic_broadcast_mode_t broadcast_mode;54 51 int speed; 55 52 } nic_info_t; … … 65 62 printf("\tduplex <half|full|simplex> - set duplex mode\n"); 66 63 printf("\tauto - enable autonegotiation\n"); 67 printf("\tunicast <block|default|list|promisc> - set unicast receive filtering\n");68 printf("\tmulticast <block|list|promisc> - set multicast receive filtering\n");69 printf("\tbroadcast <block|allow> - block or allow incoming broadcast frames\n");70 64 } 71 65 … … 151 145 } 152 146 153 rc = nic_unicast_get_mode(sess, &info->unicast_mode, 0, NULL, NULL);154 if (rc != EOK) {155 printf("Error gettinc NIC unicast receive mode.\n");156 rc = EIO;157 goto error;158 }159 160 rc = nic_multicast_get_mode(sess, &info->multicast_mode, 0, NULL, NULL);161 if (rc != EOK) {162 printf("Error gettinc NIC multicast receive mode.\n");163 rc = EIO;164 goto error;165 }166 167 rc = nic_broadcast_get_mode(sess, &info->broadcast_mode);168 if (rc != EOK) {169 printf("Error gettinc NIC broadcast receive mode.\n");170 rc = EIO;171 goto error;172 }173 147 174 148 return EOK; … … 193 167 case NIC_CM_HALF_DUPLEX: return "half-duplex"; 194 168 case NIC_CM_SIMPLEX: return "simplex"; 195 default: assert(false); return NULL;196 }197 }198 199 static const char *nic_unicast_mode_str(nic_unicast_mode_t mode)200 {201 switch (mode) {202 case NIC_UNICAST_UNKNOWN: return "unknown";203 case NIC_UNICAST_BLOCKED: return "blocked";204 case NIC_UNICAST_DEFAULT: return "default";205 case NIC_UNICAST_LIST: return "list";206 case NIC_UNICAST_PROMISC: return "promisc";207 default: assert(false); return NULL;208 }209 }210 211 static const char *nic_multicast_mode_str(nic_unicast_mode_t mode)212 {213 switch (mode) {214 case NIC_MULTICAST_UNKNOWN: return "unknown";215 case NIC_MULTICAST_BLOCKED: return "blocked";216 case NIC_MULTICAST_LIST: return "list";217 case NIC_MULTICAST_PROMISC: return "promisc";218 default: assert(false); return NULL;219 }220 }221 222 static const char *nic_broadcast_mode_str(nic_unicast_mode_t mode)223 {224 switch (mode) {225 case NIC_BROADCAST_UNKNOWN: return "unknown";226 case NIC_BROADCAST_BLOCKED: return "blocked";227 case NIC_BROADCAST_ACCEPTED: return "accepted";228 169 default: assert(false); return NULL; 229 170 } … … 293 234 printf("\tLink state: %s\n", 294 235 nic_link_state_str(nic_info.link_state)); 295 printf("\tUnicast receive mode: %s\n",296 nic_unicast_mode_str(nic_info.unicast_mode));297 printf("\tMulticast receive mode: %s\n",298 nic_multicast_mode_str(nic_info.multicast_mode));299 printf("\tBroadcast receive mode: %s\n",300 nic_broadcast_mode_str(nic_info.broadcast_mode));301 236 302 237 if (nic_info.link_state == NIC_CS_PLUGGED) { … … 434 369 435 370 return nic_set_address(sess, &addr); 436 }437 438 static int nic_set_rx_unicast(int i, char *str)439 {440 async_sess_t *sess;441 442 sess = get_nic_by_index(i);443 if (sess == NULL) {444 printf("Specified NIC doesn't exist or cannot connect to it.\n");445 return EINVAL;446 }447 448 if (!str_cmp(str, "block")) {449 nic_unicast_set_mode(sess, NIC_UNICAST_BLOCKED, NULL, 0);450 return EOK;451 }452 453 if (!str_cmp(str, "default")) {454 nic_unicast_set_mode(sess, NIC_UNICAST_DEFAULT, NULL, 0);455 return EOK;456 }457 458 if (!str_cmp(str, "list")) {459 nic_unicast_set_mode(sess, NIC_UNICAST_LIST, NULL, 0);460 return EOK;461 }462 463 if (!str_cmp(str, "promisc")) {464 nic_unicast_set_mode(sess, NIC_UNICAST_PROMISC, NULL, 0);465 return EOK;466 }467 468 469 printf("Invalid pameter - should be one of: block, default, promisc\n");470 return EINVAL;471 }472 473 static int nic_set_rx_multicast(int i, char *str)474 {475 async_sess_t *sess;476 477 sess = get_nic_by_index(i);478 if (sess == NULL) {479 printf("Specified NIC doesn't exist or cannot connect to it.\n");480 return EINVAL;481 }482 483 if (!str_cmp(str, "block")) {484 nic_multicast_set_mode(sess, NIC_MULTICAST_BLOCKED, NULL, 0);485 return EOK;486 }487 488 if (!str_cmp(str, "list")) {489 nic_multicast_set_mode(sess, NIC_MULTICAST_LIST, NULL, 0);490 return EOK;491 }492 493 if (!str_cmp(str, "promisc")) {494 nic_multicast_set_mode(sess, NIC_MULTICAST_PROMISC, NULL, 0);495 return EOK;496 }497 498 printf("Invalid pameter - should be one of: block, promisc\n");499 return EINVAL;500 }501 502 static int nic_set_rx_broadcast(int i, char *str)503 {504 async_sess_t *sess;505 506 sess = get_nic_by_index(i);507 if (sess == NULL) {508 printf("Specified NIC doesn't exist or cannot connect to it.\n");509 return EINVAL;510 }511 512 if (!str_cmp(str, "block")) {513 nic_broadcast_set_mode(sess, NIC_BROADCAST_BLOCKED);514 return EOK;515 }516 517 if (!str_cmp(str, "accept")) {518 nic_broadcast_set_mode(sess, NIC_BROADCAST_ACCEPTED);519 return EOK;520 }521 522 printf("Invalid pameter - should be 'block' or 'accept'\n");523 return EINVAL;524 371 } 525 372 … … 553 400 return nic_set_autoneg(index); 554 401 555 if (!str_cmp(argv[2], "unicast"))556 return nic_set_rx_unicast(index, argv[3]);557 558 if (!str_cmp(argv[2], "multicast"))559 return nic_set_rx_multicast(index, argv[3]);560 561 if (!str_cmp(argv[2], "broadcast"))562 return nic_set_rx_broadcast(index, argv[3]);563 564 402 } else { 565 403 printf(NAME ": Invalid argument.\n"); -
uspace/drv/nic/rtl8169/driver.c
rc62a8275 rf93ba6d 27 27 */ 28 28 29 #define _DDF_DATA_IMPLANT 30 29 31 #include <assert.h> 30 32 #include <errno.h> … … 328 330 } 329 331 330 static void rtl8169_dev_cleanup(ddf_dev_t *dev)331 {332 assert(dev);333 334 if (ddf_dev_data_get(dev))335 nic_unbind_and_destroy(dev);336 }337 338 332 static int rtl8169_dev_initialize(ddf_dev_t *dev) 339 333 { … … 357 351 failed: 358 352 ddf_msg(LVL_ERROR, "The device initialization failed"); 359 rtl8169_dev_cleanup(dev);353 // rtl8139_dev_cleanup(dev); 360 354 return ret; 361 355 … … 445 439 nic_set_ddf_fun(nic_data, fun); 446 440 ddf_fun_set_ops(fun, &rtl8169_dev_ops); 441 // ddf_fun_data_implant(fun, nic_data); 447 442 448 443 rc = ddf_fun_bind(fun); … … 472 467 err_pio: 473 468 err_destroy: 474 rtl8169_dev_cleanup(dev);469 //rtl8169_dev_cleanup(dev); 475 470 return rc; 476 471 … … 738 733 /* Configure Receive Control Register */ 739 734 uint32_t rcr = pio_read_32(rtl8169->regs + RCR); 740 rtl8169->rcr_ucast = RCR_ACCEPT_PHYS_MATCH; 741 rcr |= RCR_ACCEPT_PHYS_MATCH | RCR_ACCEPT_ERROR | RCR_ACCEPT_RUNT; 735 rcr |= RCR_ACCEPT_ALL_PHYS | RCR_ACCEPT_PHYS_MATCH \ 736 | RCR_ACCEPT_BROADCAST | RCR_ACCEPT_ERROR \ 737 | RCR_ACCEPT_RUNT; 742 738 pio_write_32(rtl8169->regs + RCR, rcr); 743 739 pio_write_16(rtl8169->regs + RMS, BUFFER_SIZE); 740 741 ddf_msg(LVL_NOTE, "RCR: 0x%08x", pio_read_32(rtl8169->regs + RCR)); 742 744 743 745 744 pio_write_16(rtl8169->regs + IMR, 0xffff); … … 794 793 } 795 794 796 /** Notify NIC framework about HW filtering state when promisc mode was disabled797 *798 * @param nic_data The NIC data799 * @param mcast_mode Current multicast mode800 * @param was_promisc Sign if the promiscuous mode was active before disabling801 */802 inline static void rtl8169_rcx_promics_rem(nic_t *nic_data,803 nic_multicast_mode_t mcast_mode, uint8_t was_promisc)804 {805 assert(nic_data);806 807 if (was_promisc != 0) {808 if (mcast_mode == NIC_MULTICAST_LIST)809 nic_report_hw_filtering(nic_data, 1, 0, -1);810 else811 nic_report_hw_filtering(nic_data, 1, 1, -1);812 } else {813 nic_report_hw_filtering(nic_data, 1, -1, -1);814 }815 }816 817 795 static int rtl8169_unicast_set(nic_t *nic_data, nic_unicast_mode_t mode, 818 796 const nic_address_t *addr, size_t addr_count) 819 797 { 820 rtl8169_t *rtl8169 = nic_get_specific(nic_data);821 uint32_t rcr = pio_read_32(rtl8169->regs + RCR);822 uint8_t was_promisc = rcr & RCR_ACCEPT_ALL_PHYS;823 nic_multicast_mode_t mcast_mode;824 825 nic_query_multicast(nic_data, &mcast_mode, 0, NULL, NULL);826 827 ddf_msg(LVL_DEBUG, "Unicast RX filter mode: %d", mode);828 829 830 switch (mode) {831 case NIC_UNICAST_BLOCKED:832 rtl8169->rcr_ucast = 0;833 rtl8169_rcx_promics_rem(nic_data, mcast_mode, was_promisc);834 break;835 case NIC_UNICAST_DEFAULT:836 rtl8169->rcr_ucast = RCR_ACCEPT_PHYS_MATCH;837 rtl8169_rcx_promics_rem(nic_data, mcast_mode, was_promisc);838 break;839 case NIC_UNICAST_LIST:840 rtl8169->rcr_ucast = RCR_ACCEPT_PHYS_MATCH | RCR_ACCEPT_ALL_PHYS;841 842 if (mcast_mode == NIC_MULTICAST_PROMISC)843 nic_report_hw_filtering(nic_data, 0, 1, -1);844 else845 nic_report_hw_filtering(nic_data, 0, 0, -1);846 break;847 case NIC_UNICAST_PROMISC:848 rtl8169->rcr_ucast = RCR_ACCEPT_PHYS_MATCH | RCR_ACCEPT_ALL_PHYS;849 850 if (mcast_mode == NIC_MULTICAST_PROMISC)851 nic_report_hw_filtering(nic_data, 1, 1, -1);852 else853 nic_report_hw_filtering(nic_data, 1, 0, -1);854 break;855 default:856 return ENOTSUP;857 }858 859 fibril_mutex_lock(&rtl8169->rx_lock);860 861 rcr &= ~(RCR_ACCEPT_PHYS_MATCH | RCR_ACCEPT_ALL_PHYS);862 pio_write_32(rtl8169->regs + RCR, rcr | rtl8169->rcr_ucast | rtl8169->rcr_mcast);863 ddf_msg(LVL_DEBUG, "new RCR value: 0x%08x", rcr | rtl8169->rcr_ucast | rtl8169->rcr_mcast);864 865 fibril_mutex_unlock(&rtl8169->rx_lock);866 798 return EOK; 867 799 } … … 870 802 const nic_address_t *addr, size_t addr_count) 871 803 { 872 rtl8169_t *rtl8169 = nic_get_specific(nic_data);873 uint32_t rcr = pio_read_32(rtl8169->regs + RCR);874 uint64_t mask;875 876 ddf_msg(LVL_DEBUG, "Multicast RX filter mode: %d", mode);877 878 switch (mode) {879 case NIC_MULTICAST_BLOCKED:880 rtl8169->rcr_mcast = 0;881 if ((rtl8169->rcr_ucast & RCR_ACCEPT_ALL_PHYS) != 0)882 nic_report_hw_filtering(nic_data, -1, 0, -1);883 else884 nic_report_hw_filtering(nic_data, -1, 1, -1);885 break;886 case NIC_MULTICAST_LIST:887 mask = nic_mcast_hash(addr, addr_count);888 pio_write_32(rtl8169->regs + MAR0, (uint32_t)mask);889 pio_write_32(rtl8169->regs + MAR0 + 4, (uint32_t)(mask >> 32));890 rtl8169->rcr_mcast = RCR_ACCEPT_MULTICAST;891 nic_report_hw_filtering(nic_data, -1, 0, -1);892 break;893 case NIC_MULTICAST_PROMISC:894 pio_write_32(rtl8169->regs + MAR0, 0xffffffffULL);895 pio_write_32(rtl8169->regs + MAR0 + 4, (uint32_t)(0xffffffffULL >> 32));896 rtl8169->rcr_mcast = RCR_ACCEPT_MULTICAST;897 nic_report_hw_filtering(nic_data, -1, 1, -1);898 break;899 default:900 return ENOTSUP;901 }902 903 fibril_mutex_lock(&rtl8169->rx_lock);904 905 rcr &= ~(RCR_ACCEPT_PHYS_MATCH | RCR_ACCEPT_ALL_PHYS);906 pio_write_32(rtl8169->regs + RCR, rcr | rtl8169->rcr_ucast | rtl8169->rcr_mcast);907 ddf_msg(LVL_DEBUG, "new RCR value: 0x%08x", rcr | rtl8169->rcr_ucast | rtl8169->rcr_mcast);908 909 fibril_mutex_unlock(&rtl8169->rx_lock);910 804 return EOK; 911 805 } … … 913 807 static int rtl8169_broadcast_set(nic_t *nic_data, nic_broadcast_mode_t mode) 914 808 { 915 rtl8169_t *rtl8169 = nic_get_specific(nic_data);916 917 /* Configure Receive Control Register */918 uint32_t rcr = pio_read_32(rtl8169->regs + RCR);919 920 ddf_msg(LVL_DEBUG, "Broadcast RX filter mode: %d", mode);921 922 switch (mode) {923 case NIC_BROADCAST_BLOCKED:924 rcr &= RCR_ACCEPT_BROADCAST;925 break;926 case NIC_BROADCAST_ACCEPTED:927 rcr |= RCR_ACCEPT_BROADCAST;928 break;929 default:930 return ENOTSUP;931 }932 933 pio_write_32(rtl8169->regs + RCR, rcr);934 ddf_msg(LVL_DEBUG," new RCR value: 0x%08x", rcr);935 936 809 return EOK; 937 810 } … … 943 816 rtl8169_t *rtl8169 = nic_get_specific(nic_data); 944 817 rtl8169_descr_t *descr; 945 int sent = 0; 946 947 ddf_msg(LVL_DEBUG, "rtl8169_transmit_done()"); 818 819 ddf_msg(LVL_NOTE, "rtl8169_transmit_done()"); 948 820 949 821 fibril_mutex_lock(&rtl8169->tx_lock); … … 956 828 descr->control &= (~CONTROL_OWN); 957 829 write_barrier(); 958 ddf_msg(LVL_ DEBUG, "TX status for descr %d: 0x%08x", tail, descr->control);830 ddf_msg(LVL_NOTE, "TX status for descr %d: 0x%08x", tail, descr->control); 959 831 960 832 tail = (tail + 1) % TX_BUFFERS_COUNT; 961 sent++; 962 } 963 964 if (sent != 0) 965 nic_set_tx_busy(nic_data, 0); 833 } 966 834 967 835 rtl8169->tx_tail = tail; … … 981 849 int frame_size; 982 850 983 ddf_msg(LVL_ DEBUG, "rtl8169_receive_done()");851 ddf_msg(LVL_NOTE, "rtl8169_receive_done()"); 984 852 985 853 fibril_mutex_lock(&rtl8169->rx_lock); … … 994 862 995 863 if (descr->control & RXSTATUS_RES) { 996 ddf_msg(LVL_ WARN, "error at slot %d: 0x%08x\n", tail, descr->control);864 ddf_msg(LVL_NOTE, "error at slot %d: 0x%08x\n", tail, descr->control); 997 865 tail = (tail + 1) % RX_BUFFERS_COUNT; 998 866 continue; … … 1003 871 1004 872 if (descr->control & CONTROL_LS) { 1005 ddf_msg(LVL_DEBUG, "received message at slot %d, control 0x%08x", tail, descr->control); 873 874 ddf_msg(LVL_NOTE, "received message at slot %d, control 0x%08x", tail, descr->control); 1006 875 1007 876 if (fsidx != tail) … … 1038 907 rtl8169_t *rtl8169 = nic_get_specific(nic_data); 1039 908 1040 ddf_msg(LVL_ DEBUG, "rtl8169_irq_handler(): isr=0x%04x", isr);909 ddf_msg(LVL_NOTE, "rtl8169_irq_handler(): isr=0x%04x", isr); 1041 910 pio_write_16(rtl8169->regs + IMR, 0xffff); 1042 911 … … 1094 963 fibril_mutex_lock(&rtl8169->tx_lock); 1095 964 1096 ddf_msg(LVL_ DEBUG, "send_frame: size: %zu, tx_head=%d tx_tail=%d",965 ddf_msg(LVL_NOTE, "send_frame: size: %zu, tx_head=%d tx_tail=%d", 1097 966 size, rtl8169->tx_head, rtl8169->tx_tail); 1098 967 … … 1117 986 prev = &rtl8169->tx_ring[(head - 1) % TX_BUFFERS_COUNT]; 1118 987 1119 ddf_msg(LVL_ DEBUG, "current_descr=%p, prev_descr=%p", descr, prev);988 ddf_msg(LVL_NOTE, "current_descr=%p, prev_descr=%p", descr, prev); 1120 989 1121 990 descr->control = CONTROL_OWN | CONTROL_FS | CONTROL_LS; -
uspace/drv/nic/rtl8169/driver.h
rc62a8275 rf93ba6d 86 86 size_t tx_used; 87 87 88 /** Receive Control Register masks */89 uint32_t rcr_ucast;90 uint32_t rcr_mcast;91 92 88 /** Lock for receiver */ 93 89 fibril_mutex_t rx_lock; -
uspace/lib/c/generic/iplink.c
rc62a8275 rf93ba6d 171 171 } 172 172 173 int iplink_set_mac48(iplink_t *iplink, addr48_t mac)174 {175 async_exch_t *exch = async_exchange_begin(iplink->sess);176 177 ipc_call_t answer;178 aid_t req = async_send_0(exch, IPLINK_GET_MAC48, &answer);179 180 int rc = async_data_read_start(exch, mac, sizeof(addr48_t));181 182 loc_exchange_end(exch);183 184 if (rc != EOK) {185 async_forget(req);186 return rc;187 }188 189 sysarg_t retval;190 async_wait_for(req, &retval);191 192 return (int) retval;193 }194 195 196 173 int iplink_addr_add(iplink_t *iplink, inet_addr_t *addr) 197 174 { … … 253 230 free(sdu.data); 254 231 async_answer_0(iid, rc); 255 }256 257 static void iplink_ev_change_addr(iplink_t *iplink, ipc_callid_t iid,258 ipc_call_t *icall)259 {260 addr48_t *addr;261 size_t size;262 263 int rc = async_data_write_accept((void **)&addr, false,264 sizeof(addr48_t), sizeof(addr48_t), 0, &size);265 if (rc != EOK) {266 async_answer_0(iid, rc);267 return;268 }269 270 rc = iplink->ev_ops->change_addr(iplink, *addr);271 free(addr);272 async_answer_0(iid, EOK);273 232 } 274 233 … … 290 249 iplink_ev_recv(iplink, callid, &call); 291 250 break; 292 case IPLINK_EV_CHANGE_ADDR:293 iplink_ev_change_addr(iplink, callid, &call);294 251 default: 295 252 async_answer_0(callid, ENOTSUP); -
uspace/lib/c/generic/iplink_srv.c
rc62a8275 rf93ba6d 81 81 } 82 82 83 static void iplink_set_mac48_srv(iplink_srv_t *srv, ipc_callid_t iid,84 ipc_call_t *icall)85 {86 int rc;87 size_t size;88 addr48_t mac;89 ipc_callid_t callid;90 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 110 83 static void iplink_addr_add_srv(iplink_srv_t *srv, ipc_callid_t iid, 111 84 ipc_call_t *icall) … … 279 252 iplink_get_mac48_srv(srv, callid, &call); 280 253 break; 281 case IPLINK_SET_MAC48:282 iplink_set_mac48_srv(srv, callid, &call);283 break;284 254 case IPLINK_SEND: 285 255 iplink_send_srv(srv, callid, &call); … … 330 300 } 331 301 332 int iplink_ev_change_addr(iplink_srv_t *srv, addr48_t *addr)333 {334 if (srv->client_sess == NULL)335 return EIO;336 337 async_exch_t *exch = async_exchange_begin(srv->client_sess);338 339 ipc_call_t answer;340 aid_t req = async_send_0(exch, IPLINK_EV_CHANGE_ADDR, &answer);341 342 int rc = async_data_write_start(exch, addr, sizeof(addr48_t));343 async_exchange_end(exch);344 345 if (rc != EOK) {346 async_forget(req);347 return rc;348 }349 350 sysarg_t retval;351 async_wait_for(req, &retval);352 if (retval != EOK)353 return retval;354 355 return EOK;356 }357 358 302 /** @} 359 303 */ -
uspace/lib/c/include/inet/iplink.h
rc62a8275 rf93ba6d 78 78 typedef struct iplink_ev_ops { 79 79 int (*recv)(iplink_t *, iplink_recv_sdu_t *, ip_ver_t); 80 int (*change_addr)(iplink_t *, addr48_t);81 80 } iplink_ev_ops_t; 82 81 … … 89 88 extern int iplink_get_mtu(iplink_t *, size_t *); 90 89 extern int iplink_get_mac48(iplink_t *, addr48_t *); 91 extern int iplink_set_mac48(iplink_t *, addr48_t);92 90 93 91 #endif -
uspace/lib/c/include/inet/iplink_srv.h
rc62a8275 rf93ba6d 59 59 int (*get_mtu)(iplink_srv_t *, size_t *); 60 60 int (*get_mac48)(iplink_srv_t *, addr48_t *); 61 int (*set_mac48)(iplink_srv_t *, addr48_t *);62 61 int (*addr_add)(iplink_srv_t *, inet_addr_t *); 63 62 int (*addr_remove)(iplink_srv_t *, inet_addr_t *); … … 68 67 extern int iplink_conn(ipc_callid_t, ipc_call_t *, void *); 69 68 extern int iplink_ev_recv(iplink_srv_t *, iplink_recv_sdu_t *, ip_ver_t); 70 extern int iplink_ev_change_addr(iplink_srv_t *, addr48_t *);71 69 72 70 #endif -
uspace/lib/c/include/ipc/iplink.h
rc62a8275 rf93ba6d 41 41 IPLINK_GET_MTU = IPC_FIRST_USER_METHOD, 42 42 IPLINK_GET_MAC48, 43 IPLINK_SET_MAC48,44 43 IPLINK_SEND, 45 44 IPLINK_SEND6, … … 49 48 50 49 typedef enum { 51 IPLINK_EV_RECV = IPC_FIRST_USER_METHOD, 52 IPLINK_EV_CHANGE_ADDR, 50 IPLINK_EV_RECV = IPC_FIRST_USER_METHOD 53 51 } iplink_event_t; 54 52 -
uspace/lib/nic/src/nic_driver.c
rc62a8275 rf93ba6d 47 47 #include <ops/nic.h> 48 48 #include <errno.h> 49 50 #include <io/log.h> 49 51 50 52 #include "nic_driver.h" … … 436 438 int rc = nic_ev_addr_changed(nic_data->client_session, 437 439 address); 440 log_msg(LOG_DEFAULT, LVL_WARN, "rc=%d", rc); 438 441 439 442 if (rc != EOK) { -
uspace/srv/net/ethip/ethip.c
rc62a8275 rf93ba6d 59 59 static int ethip_get_mtu(iplink_srv_t *srv, size_t *mtu); 60 60 static int ethip_get_mac48(iplink_srv_t *srv, addr48_t *mac); 61 static int ethip_set_mac48(iplink_srv_t *srv, addr48_t *mac);62 61 static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr); 63 62 static int ethip_addr_remove(iplink_srv_t *srv, inet_addr_t *addr); … … 72 71 .get_mtu = ethip_get_mtu, 73 72 .get_mac48 = ethip_get_mac48, 74 .set_mac48 = ethip_set_mac48,75 73 .addr_add = ethip_addr_add, 76 74 .addr_remove = ethip_addr_remove … … 286 284 } 287 285 288 static int ethip_set_mac48(iplink_srv_t *srv, addr48_t *mac)289 {290 log_msg(LOG_DEFAULT, LVL_DEBUG, "ethip_set_mac48()");291 292 ethip_nic_t *nic = (ethip_nic_t *) srv->arg;293 addr48(*mac, nic->mac_addr);294 295 return EOK;296 }297 298 286 static int ethip_addr_add(iplink_srv_t *srv, inet_addr_t *addr) 299 287 { -
uspace/srv/net/ethip/ethip_nic.c
rc62a8275 rf93ba6d 245 245 addr[0], addr[1], addr[2], addr[3], addr[4], addr[5]); 246 246 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 255 247 free(addr); 256 248 async_answer_0(callid, EOK); … … 317 309 break; 318 310 default: 319 log_msg(LOG_DEFAULT, LVL_DEBUG, "unknown IPC method: % " PRIun,IPC_GET_IMETHOD(call));311 log_msg(LOG_DEFAULT, LVL_DEBUG, "unknown IPC method: %d", (int) IPC_GET_IMETHOD(call)); 320 312 async_answer_0(callid, ENOTSUP); 321 313 } -
uspace/srv/net/inetsrv/inet_link.c
rc62a8275 rf93ba6d 55 55 56 56 static int inet_iplink_recv(iplink_t *, iplink_recv_sdu_t *, ip_ver_t); 57 static int inet_iplink_change_addr(iplink_t *, addr48_t);58 57 static inet_link_t *inet_link_get_by_id_locked(sysarg_t); 59 58 60 59 static iplink_ev_ops_t inet_iplink_ev_ops = { 61 .recv = inet_iplink_recv, 62 .change_addr = inet_iplink_change_addr, 60 .recv = inet_iplink_recv 63 61 }; 64 62 … … 112 110 113 111 return rc; 114 }115 116 static 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;128 112 } 129 113
Note:
See TracChangeset
for help on using the changeset viewer.