| /* |
| * Copyright (c) 2007-2008 Atheros Communications Inc. |
| * |
| * Permission to use, copy, modify, and/or distribute this software for any |
| * purpose with or without fee is hereby granted, provided that the above |
| * copyright notice and this permission notice appear in all copies. |
| * |
| * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
| * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
| * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
| * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
| * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
| * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
| */ |
| /* */ |
| /* Module Name : wrap_sec.c */ |
| /* */ |
| /* Abstract */ |
| /* This module contains wrapper functions for CENC. */ |
| /* */ |
| /* NOTES */ |
| /* Platform dependent. */ |
| /* */ |
| /************************************************************************/ |
| |
| #include "oal_dt.h" |
| #include "usbdrv.h" |
| |
| #include <linux/netlink.h> |
| #include <net/iw_handler.h> |
| |
| #ifdef ZM_ENABLE_CENC |
| extern int zfLnxCencSendMsg(struct sock *netlink_sk, u_int8_t *msg, int len); |
| |
| u16_t zfLnxCencAsocNotify(zdev_t *dev, u16_t *macAddr, u8_t *body, |
| u16_t bodySize, u16_t port) |
| { |
| struct usbdrv_private *macp = (struct usbdrv_private *)dev->priv; |
| struct zydas_cenc_sta_info cenc_info; |
| /* struct sock *netlink_sk; */ |
| u8_t ie_len; |
| int ii; |
| |
| /* Create NETLINK socket */ |
| /*netlink_sk = netlink_kernel_create(NETLINK_USERSOCK, NULL); */ |
| |
| if (macp->netlink_sk == NULL) { |
| printk(KERN_ERR "NETLINK Socket is NULL\n"); |
| return -1; |
| } |
| |
| memset(&cenc_info, 0, sizeof(cenc_info)); |
| |
| /* memcpy(cenc_info.gsn, vap->iv_cencmsk_keys.wk_txiv, |
| * ZM_CENC_IV_LEN); |
| */ |
| zfiWlanQueryGSN(dev, cenc_info.gsn, port); |
| cenc_info.datalen += ZM_CENC_IV_LEN; |
| ie_len = body[1] + 2; |
| memcpy(cenc_info.wie, body, ie_len); |
| cenc_info.datalen += ie_len; |
| |
| memcpy(cenc_info.sta_mac, macAddr, 6); |
| cenc_info.msg_type = ZM_CENC_WAI_REQUEST; |
| cenc_info.datalen += 6 + 2; |
| |
| printk(KERN_ERR "===== zfwCencSendMsg, bodySize: %d =====\n", bodySize); |
| |
| for (ii = 0; ii < bodySize; ii++) { |
| printk(KERN_ERR "%02x ", body[ii]); |
| |
| if ((ii & 0xf) == 0xf) |
| printk(KERN_ERR "\n"); |
| } |
| |
| zfLnxCencSendMsg(macp->netlink_sk, (u8_t *)&cenc_info, |
| cenc_info.datalen+4); |
| |
| /* Close NETLINK socket */ |
| /* sock_release(netlink_sk); */ |
| |
| return 0; |
| } |
| #endif /* ZM_ENABLE_CENC */ |
| |
| u8_t zfwCencHandleBeaconProbrespon(zdev_t *dev, u8_t *pWIEc, |
| u8_t *pPeerSSIDc, u8_t *pPeerAddrc) |
| { |
| return 0; |
| } |
| |
| u8_t zfwGetPktEncExemptionActionType(zdev_t *dev, zbuf_t *buf) |
| { |
| return ZM_ENCRYPTION_EXEMPT_NO_EXEMPTION; |
| } |
| |
| void copyToIntTxBuffer(zdev_t *dev, zbuf_t *buf, u8_t *src, |
| u16_t offset, u16_t length) |
| { |
| u16_t i; |
| |
| for (i = 0; i < length; i++) { |
| /* zmw_tx_buf_writeb(dev, buf, offset+i, src[i]); */ |
| *(u8_t *)((u8_t *)buf->data+offset+i) = src[i]; |
| } |
| } |
| |
| u16_t zfwStaAddIeWpaRsn(zdev_t *dev, zbuf_t *buf, u16_t offset, u8_t frameType) |
| { |
| struct usbdrv_private *macp = dev->ml_priv; |
| /* zm_msg1_mm(ZM_LV_0, "CWY - add wpaie content Length : " |
| * , macp->supIe[1]); |
| */ |
| if (macp->supIe[1] != 0) { |
| copyToIntTxBuffer(dev, buf, macp->supIe, offset, |
| macp->supIe[1]+2); |
| /* memcpy(buf->data[offset], macp->supIe, macp->supIe[1]+2);*/ |
| offset += (macp->supIe[1]+2); |
| } |
| |
| return offset; |
| } |
| |
| /* Leave an empty line below to remove warning message on some compiler */ |