sdev = to_siw_dev(base_dev);
 
        switch (event) {
-       case NETDEV_UP:
-               sdev->state = IB_PORT_ACTIVE;
-               siw_port_event(sdev, 1, IB_EVENT_PORT_ACTIVE);
-               break;
-
-       case NETDEV_DOWN:
-               sdev->state = IB_PORT_DOWN;
-               siw_port_event(sdev, 1, IB_EVENT_PORT_ERR);
-               break;
-
        case NETDEV_REGISTER:
                /*
                 * Device registration now handled only by
         * Todo: Below netdev events are currently not handled.
         */
        case NETDEV_CHANGEMTU:
-       case NETDEV_CHANGE:
                break;
 
        default:
        if (sdev) {
                dev_dbg(&netdev->dev, "siw: new device\n");
 
-               if (netif_running(netdev) && netif_carrier_ok(netdev))
-                       sdev->state = IB_PORT_ACTIVE;
-               else
-                       sdev->state = IB_PORT_DOWN;
-
                ib_mark_name_assigned_by_user(&sdev->base_dev);
                rv = siw_device_register(sdev, basedev_name);
                if (rv)
 
        attr->max_msg_sz = -1;
        attr->max_mtu = ib_mtu_int_to_enum(sdev->netdev->mtu);
        attr->active_mtu = ib_mtu_int_to_enum(sdev->netdev->mtu);
-       attr->phys_state = sdev->state == IB_PORT_ACTIVE ?
+       attr->state = ib_get_curr_port_state(sdev->netdev);
+       attr->phys_state = attr->state == IB_PORT_ACTIVE ?
                IB_PORT_PHYS_STATE_LINK_UP : IB_PORT_PHYS_STATE_DISABLED;
        attr->port_cap_flags = IB_PORT_CM_SUP | IB_PORT_DEVICE_MGMT_SUP;
-       attr->state = sdev->state;
        /*
         * All zero
         *