|
@@ -726,13 +726,18 @@ static int iscsi_sw_tcp_conn_get_param(struct iscsi_cls_conn *cls_conn,
|
|
switch(param) {
|
|
switch(param) {
|
|
case ISCSI_PARAM_CONN_PORT:
|
|
case ISCSI_PARAM_CONN_PORT:
|
|
case ISCSI_PARAM_CONN_ADDRESS:
|
|
case ISCSI_PARAM_CONN_ADDRESS:
|
|
|
|
+ case ISCSI_PARAM_LOCAL_PORT:
|
|
spin_lock_bh(&conn->session->frwd_lock);
|
|
spin_lock_bh(&conn->session->frwd_lock);
|
|
if (!tcp_sw_conn || !tcp_sw_conn->sock) {
|
|
if (!tcp_sw_conn || !tcp_sw_conn->sock) {
|
|
spin_unlock_bh(&conn->session->frwd_lock);
|
|
spin_unlock_bh(&conn->session->frwd_lock);
|
|
return -ENOTCONN;
|
|
return -ENOTCONN;
|
|
}
|
|
}
|
|
- rc = kernel_getpeername(tcp_sw_conn->sock,
|
|
|
|
- (struct sockaddr *)&addr, &len);
|
|
|
|
|
|
+ if (param == ISCSI_PARAM_LOCAL_PORT)
|
|
|
|
+ rc = kernel_getsockname(tcp_sw_conn->sock,
|
|
|
|
+ (struct sockaddr *)&addr, &len);
|
|
|
|
+ else
|
|
|
|
+ rc = kernel_getpeername(tcp_sw_conn->sock,
|
|
|
|
+ (struct sockaddr *)&addr, &len);
|
|
spin_unlock_bh(&conn->session->frwd_lock);
|
|
spin_unlock_bh(&conn->session->frwd_lock);
|
|
if (rc)
|
|
if (rc)
|
|
return rc;
|
|
return rc;
|
|
@@ -895,6 +900,7 @@ static umode_t iscsi_sw_tcp_attr_is_visible(int param_type, int param)
|
|
case ISCSI_PARAM_DATADGST_EN:
|
|
case ISCSI_PARAM_DATADGST_EN:
|
|
case ISCSI_PARAM_CONN_ADDRESS:
|
|
case ISCSI_PARAM_CONN_ADDRESS:
|
|
case ISCSI_PARAM_CONN_PORT:
|
|
case ISCSI_PARAM_CONN_PORT:
|
|
|
|
+ case ISCSI_PARAM_LOCAL_PORT:
|
|
case ISCSI_PARAM_EXP_STATSN:
|
|
case ISCSI_PARAM_EXP_STATSN:
|
|
case ISCSI_PARAM_PERSISTENT_ADDRESS:
|
|
case ISCSI_PARAM_PERSISTENT_ADDRESS:
|
|
case ISCSI_PARAM_PERSISTENT_PORT:
|
|
case ISCSI_PARAM_PERSISTENT_PORT:
|