diff options
-rw-r--r-- | drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c | 76 |
1 files changed, 75 insertions, 1 deletions
diff --git a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c index c07df76..d157f95 100644 --- a/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c +++ b/drivers/staging/fsl_dpa_offload/wrp_dpa_ipsec.c @@ -1626,7 +1626,7 @@ long wrp_dpa_ipsec_do_compat_ioctl(struct file *filp, unsigned int cmd, } - case DPA_IPSEC_IOC_SA_MODIFY: { + case DPA_IPSEC_IOC_SA_MODIFY_COMPAT: { struct dpa_ipsec_sa_modify_prm modify_prm; int sa_id, ret; @@ -1645,6 +1645,80 @@ free: break; } + + case DPA_IPSEC_IOC_SA_REQUEST_SEQ_NUMBER: { + int sa_id; + + if (copy_from_user(&sa_id, (int *)args, sizeof(int))) { + log_err("Could not copy SA id\n"); + return -EINVAL; + } + + ret = dpa_ipsec_sa_request_seq_number(sa_id); + break; + } + + case DPA_IPSEC_IOC_SA_GET_SEQ_NUMBER: { + struct ioc_dpa_ipsec_sa_get_seq_num prm; + + if (copy_from_user(&prm, + (struct ioc_dpa_ipsec_sa_get_seq_num *)args, + sizeof(prm))) { + log_err("Could not copy from user stats params\n"); + return -EINVAL; + } + + if (prm.sa_id < 0) { + log_err("Invalid input SA id\n"); + return -EINVAL; + } + + ret = dpa_ipsec_sa_get_seq_number(prm.sa_id, &prm.seq); + if (ret < 0) { + log_err("Get SEQ number for SA %d failed\n", prm.sa_id); + break; + } + + if (copy_to_user((struct ioc_dpa_ipsec_sa_get_seq_num *)args, + &prm, sizeof(prm))) { + log_err("Could not copy SEQ number to user for SA %d\n", + prm.sa_id); + return -EINVAL; + } + break; + } + + case DPA_IPSEC_IOC_SA_GET_OUT_PATH: { + struct ioc_dpa_ipsec_sa_get_out_path prm; + + if (copy_from_user(&prm, + (struct ioc_dpa_ipsec_sa_get_out_path *)args, + sizeof(prm))) { + log_err("Could not copy from user out_path params\n"); + return -EINVAL; + } + + if (prm.sa_id < 0) { + log_err("Invalid input SA id\n"); + return -EINVAL; + } + + ret = dpa_ipsec_sa_get_out_path(prm.sa_id, &prm.fqid); + if (ret < 0) { + log_err("Get out path for SA %d failed\n", prm.sa_id); + break; + } + + if (copy_to_user((struct ioc_dpa_ipsec_sa_get_out_path *)args, + &prm, sizeof(prm))) { + log_err("Could not copy out_path to user for SA %d\n", + prm.sa_id); + return -EINVAL; + } + + break; + } + default: log_err("Invalid DPA IPsec ioctl (0x%x)\n", cmd); ret = -EINVAL; |