本文整理汇总了C++中pr_err_ratelimited函数的典型用法代码示例。如果您正苦于以下问题:C++ pr_err_ratelimited函数的具体用法?C++ pr_err_ratelimited怎么用?C++ pr_err_ratelimited使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了pr_err_ratelimited函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: rmnet_usb_ctrl_dmux
static int rmnet_usb_ctrl_dmux(struct ctrl_pkt_list_elem *clist)
{
struct mux_hdr *hdr;
size_t pad_len;
size_t total_len;
unsigned int mux_id;
hdr = (struct mux_hdr *)clist->cpkt.data;
pad_len = hdr->padding_info & MUX_CTRL_PADLEN_MASK;
if (pad_len > MAX_PAD_BYTES(4)) {
pr_err_ratelimited("%s: Invalid pad len %d\n", __func__,
pad_len);
return -EINVAL;
}
mux_id = hdr->mux_id;
if (!mux_id || mux_id > insts_per_dev) {
pr_err_ratelimited("%s: Invalid mux id %d\n", __func__, mux_id);
return -EINVAL;
}
total_len = ntohs(hdr->pkt_len_w_padding);
if (!total_len || !(total_len - pad_len)) {
pr_err_ratelimited("%s: Invalid pkt length %d\n", __func__,
total_len);
return -EINVAL;
}
clist->cpkt.data_size = total_len - pad_len;
return mux_id - 1;
}
开发者ID:Svard73,项目名称:SM-T700-T705-Kernel,代码行数:32,代码来源:rmnet_usb_ctrl.c
示例2: diagmem_free
void diagmem_free(struct diagchar_dev *driver, void *buf, int pool_type)
{
int i = 0;
unsigned long flags;
struct diag_mempool_t *mempool = NULL;
if (!driver || !buf)
return;
for (i = 0; i < NUM_MEMORY_POOLS; i++) {
mempool = &diag_mempools[i];
if (pool_type != mempool->id)
continue;
if (!mempool->pool) {
pr_err_ratelimited("diag: %s mempool is not initialized yet\n",
mempool->name);
break;
}
spin_lock_irqsave(&mempool->lock, flags);
if (mempool->count > 0) {
mempool_free(buf, mempool->pool);
atomic_add(-1, (atomic_t *)&mempool->count);
} else {
pr_err_ratelimited("diag: Attempting to free items from %s mempool which is already empty\n",
mempool->name);
}
spin_unlock_irqrestore(&mempool->lock, flags);
break;
}
}
开发者ID:DgeunLee,项目名称:DTS-Eagle-Integration_CAF-Android-kernel,代码行数:30,代码来源:diagmem.c
示例3: hsic_write
static int hsic_write(int id, unsigned char *buf, int len, int ctxt)
{
int err = 0;
struct diag_hsic_info *ch = NULL;
if (id < 0 || id >= NUM_HSIC_DEV) {
pr_err_ratelimited("diag: In %s, invalid index %d\n",
__func__, id);
return -EINVAL;
}
if (!buf || len <= 0) {
pr_err_ratelimited("diag: In %s, ch %d, invalid buf %pK len %d\n",
__func__, id, buf, len);
return -EINVAL;
}
ch = &diag_hsic[id];
if (!ch->opened || !ch->enabled) {
pr_debug_ratelimited("diag: In %s, ch %d is disabled. opened %d enabled: %d\n",
__func__, id, ch->opened, ch->enabled);
return -EIO;
}
err = diag_bridge_write(ch->id, buf, len);
if (err) {
pr_err_ratelimited("diag: cannot write to HSIC ch %d, err: %d\n",
ch->id, err);
}
return err;
}
开发者ID:Sony-Kernels,项目名称:android_kernel_sony_msm8994_suzuran_6.0.x,代码行数:30,代码来源:diagfwd_hsic.c
示例4: ksb_tomdm_work
static void ksb_tomdm_work(struct work_struct *w)
{
struct ks_bridge *ksb = container_of(w, struct ks_bridge, to_mdm_work);
struct data_pkt *pkt;
unsigned long flags;
struct urb *urb;
int ret;
spin_lock_irqsave(&ksb->lock, flags);
while (!list_empty(&ksb->to_mdm_list)
&& test_bit(USB_DEV_CONNECTED, &ksb->flags)) {
pkt = list_first_entry(&ksb->to_mdm_list,
struct data_pkt, list);
list_del_init(&pkt->list);
spin_unlock_irqrestore(&ksb->lock, flags);
urb = usb_alloc_urb(0, GFP_KERNEL);
if (!urb) {
pr_err_ratelimited("%s: unable to allocate urb",
ksb->fs_dev.name);
ksb_free_data_pkt(pkt);
return;
}
ret = usb_autopm_get_interface(ksb->ifc);
if (ret < 0 && ret != -EAGAIN && ret != -EACCES) {
pr_err_ratelimited("%s: autopm_get failed:%d",
ksb->fs_dev.name, ret);
usb_free_urb(urb);
ksb_free_data_pkt(pkt);
return;
}
usb_fill_bulk_urb(urb, ksb->udev, ksb->out_pipe,
pkt->buf, pkt->len, ksb_tx_cb, pkt);
usb_anchor_urb(urb, &ksb->submitted);
dbg_log_event(ksb, "S TX_URB", pkt->len, 0);
atomic_inc(&ksb->tx_pending_cnt);
ret = usb_submit_urb(urb, GFP_KERNEL);
if (ret) {
dev_err(&ksb->udev->dev, "out urb submission failed");
usb_unanchor_urb(urb);
usb_free_urb(urb);
ksb_free_data_pkt(pkt);
usb_autopm_put_interface(ksb->ifc);
atomic_dec(&ksb->tx_pending_cnt);
wake_up(&ksb->pending_urb_wait);
return;
}
usb_mark_last_busy(ksb->udev);
usb_free_urb(urb);
spin_lock_irqsave(&ksb->lock, flags);
}
spin_unlock_irqrestore(&ksb->lock, flags);
}
开发者ID:lssjbrolli,项目名称:android_kernel_samsung_klimtlte,代码行数:58,代码来源:ks_bridge.c
示例5: hsic_read_work_fn
static void hsic_read_work_fn(struct work_struct *work)
{
int err = 0;
unsigned char *buf = NULL;
struct diag_hsic_info *ch = container_of(work, struct diag_hsic_info,
read_work);
if (!ch || !ch->enabled || !ch->opened)
return;
do {
buf = diagmem_alloc(driver, DIAG_MDM_BUF_SIZE, ch->mempool);
if (!buf) {
err = -ENOMEM;
break;
}
err = diag_bridge_read(ch->id, buf, DIAG_MDM_BUF_SIZE);
if (err) {
diagmem_free(driver, buf, ch->mempool);
pr_err_ratelimited("diag: Unable to read from HSIC channel %d, err: %d\n",
ch->id, err);
break;
}
} while (buf);
/* Read from the HSIC channel continously if the channel is present */
if (!err)
queue_work(ch->hsic_wq, &ch->read_work);
}
开发者ID:Sony-Kernels,项目名称:android_kernel_sony_msm8994_suzuran_6.0.x,代码行数:29,代码来源:diagfwd_hsic.c
示例6: msm_ispif_subdev_ioctl
static long msm_ispif_subdev_ioctl(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
struct ispif_device *ispif =
(struct ispif_device *)v4l2_get_subdevdata(sd);
switch (cmd) {
case VIDIOC_MSM_ISPIF_CFG:
return msm_ispif_cmd(sd, arg);
case MSM_SD_NOTIFY_FREEZE: {
ispif->ispif_sof_debug = 0;
return 0;
}
case MSM_SD_SHUTDOWN: {
struct ispif_device *ispif =
(struct ispif_device *)v4l2_get_subdevdata(sd);
if (ispif && ispif->base)
msm_ispif_release(ispif);
return 0;
}
default:
pr_err_ratelimited("%s: invalid cmd 0x%x received\n",
__func__, cmd);
return -ENOIOCTLCMD;
}
}
开发者ID:bishnuprasad884uu,项目名称:DareKernel,代码行数:26,代码来源:msm_ispif.c
示例7: tls_sw_fallback_init
int tls_sw_fallback_init(struct sock *sk,
struct tls_offload_context_tx *offload_ctx,
struct tls_crypto_info *crypto_info)
{
const u8 *key;
int rc;
offload_ctx->aead_send =
crypto_alloc_aead("gcm(aes)", 0, CRYPTO_ALG_ASYNC);
if (IS_ERR(offload_ctx->aead_send)) {
rc = PTR_ERR(offload_ctx->aead_send);
pr_err_ratelimited("crypto_alloc_aead failed rc=%d\n", rc);
offload_ctx->aead_send = NULL;
goto err_out;
}
key = ((struct tls12_crypto_info_aes_gcm_128 *)crypto_info)->key;
rc = crypto_aead_setkey(offload_ctx->aead_send, key,
TLS_CIPHER_AES_GCM_128_KEY_SIZE);
if (rc)
goto free_aead;
rc = crypto_aead_setauthsize(offload_ctx->aead_send,
TLS_CIPHER_AES_GCM_128_TAG_SIZE);
if (rc)
goto free_aead;
return 0;
free_aead:
crypto_free_aead(offload_ctx->aead_send);
err_out:
return rc;
}
开发者ID:AlexShiLucky,项目名称:linux,代码行数:34,代码来源:tls_device_fallback.c
示例8: msm_ispif_subdev_ioctl
static long msm_ispif_subdev_ioctl(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
#ifdef CONFIG_COMPAT
void __user *up;
if (is_compat_task()) {
up = (void __user *)compat_ptr((unsigned long)arg);
arg = up;
}
#endif
switch (cmd) {
case VIDIOC_MSM_ISPIF_CFG:
return msm_ispif_cmd(sd, arg);
case MSM_SD_SHUTDOWN: {
struct ispif_device *ispif =
(struct ispif_device *)v4l2_get_subdevdata(sd);
if (ispif && ispif->base)
msm_ispif_release(ispif);
return 0;
}
default:
pr_err_ratelimited("%s: invalid cmd 0x%x received\n",
__func__, cmd);
return -ENOIOCTLCMD;
}
}
开发者ID:PlatinumMaster,项目名称:android_kernel_samsung_cprimeltemtr,代码行数:27,代码来源:msm_ispif.c
示例9: diag_hsic_read_complete_callback
static void diag_hsic_read_complete_callback(void *ctxt, char *buf,
int buf_size, int actual_size)
{
int err = -2;
if (!driver->hsic_ch) {
/*
* The hsic channel is closed. Return the buffer to
* the pool. Do not send it on.
*/
diagmem_free(driver, buf, POOL_TYPE_HSIC);
pr_debug("diag: In %s: driver->hsic_ch == 0, actual_size: %d\n",
__func__, actual_size);
return;
}
/*
* Note that zero length is valid and still needs to be sent to
* the USB only when we are logging data to the USB
*/
if ((actual_size > 0) ||
((actual_size == 0) && (driver->logging_mode == USB_MODE))) {
if (!buf) {
pr_err("diag: Out of diagmem for HSIC\n");
} else {
/*
* Send data in buf to be written on the
* appropriate device, e.g. USB MDM channel
*/
driver->write_len_mdm = actual_size;
err = diag_device_write((void *)buf, HSIC_DATA, NULL);
/* If an error, return buffer to the pool */
if (err) {
diagmem_free(driver, buf, POOL_TYPE_HSIC);
pr_err_ratelimited("diag: In %s, error calling diag_device_write, err: %d\n",
__func__, err);
}
}
} else {
/*
* The buffer has an error status associated with it. Do not
* pass it on. Note that -ENOENT is sent when the diag bridge
* is closed.
*/
diagmem_free(driver, buf, POOL_TYPE_HSIC);
pr_debug("diag: In %s: error status: %d\n", __func__,
actual_size);
}
/*
* If for some reason there was no hsic data to write to the
* mdm channel, set up another read
*/
if (err &&
((driver->logging_mode == MEMORY_DEVICE_MODE) ||
(driver->usb_mdm_connected && !driver->hsic_suspend))) {
queue_work(driver->diag_hsic_wq,
&driver->diag_read_hsic_work);
}
}
开发者ID:thedancomplex,项目名称:BMW-OpenSource,代码行数:60,代码来源:diagfwd_hsic.c
示例10: diag_remote_dev_read_done
int diag_remote_dev_read_done(int id, unsigned char *buf, int len)
{
int err = 0;
struct diagfwd_bridge_info *ch = NULL;
if (id < 0 || id >= NUM_REMOTE_DEV)
return -EINVAL;
ch = &bridge_info[id];
if (ch->type == DIAG_DATA_TYPE) {
err = diag_mux_write(BRIDGE_TO_MUX(id), buf, len, id);
if (ch->dev_ops && ch->dev_ops->queue_read)
ch->dev_ops->queue_read(ch->ctxt);
return err;
}
/*
* For DCI channels copy to the internal buffer. Don't queue any
* further reads. A read should be queued once we are done processing
* the current packet
*/
if (len <= 0 || len > DIAG_MDM_BUF_SIZE) {
pr_err_ratelimited("diag: Invalid len %d in %s, ch: %s\n",
len, __func__, ch->name);
return -EINVAL;
}
ch->dci_read_ptr = buf;
memcpy(ch->dci_read_buf, buf, len);
ch->dci_read_len = len;
queue_work(ch->dci_wq, &ch->dci_read_work);
return 0;
}
开发者ID:CaptainThrowback,项目名称:android_kernel_htc_pme,代码行数:30,代码来源:diagfwd_bridge.c
示例11: msm_sensor_init_subdev_ioctl
static long msm_sensor_init_subdev_ioctl(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
int32_t rc = 0;
struct msm_sensor_init_t *s_init = v4l2_get_subdevdata(sd);
CDBG("Enter");
/* Validate input parameters */
if (!s_init) {
pr_err("failed: s_init %p", s_init);
return -EINVAL;
}
switch (cmd) {
case VIDIOC_MSM_SENSOR_INIT_CFG:
rc = msm_sensor_driver_cmd(s_init, arg);
break;
default:
pr_err_ratelimited("default\n");
break;
}
return 0;
}
开发者ID:GSandeep24,项目名称:android_kernel_lenovo_msm8916,代码行数:25,代码来源:msm_sensor_init.c
示例12: xen_register_mcast_ctrl_watch
static int xen_register_mcast_ctrl_watch(struct xenbus_device *dev,
struct xenvif *vif)
{
int err = 0;
char *node;
unsigned maxlen = strlen(dev->otherend) +
sizeof("/request-multicast-control");
if (vif->mcast_ctrl_watch.node) {
pr_err_ratelimited("Watch is already registered\n");
return -EADDRINUSE;
}
node = kmalloc(maxlen, GFP_KERNEL);
if (!node) {
pr_err("Failed to allocate memory for watch\n");
return -ENOMEM;
}
snprintf(node, maxlen, "%s/request-multicast-control",
dev->otherend);
vif->mcast_ctrl_watch.node = node;
vif->mcast_ctrl_watch.callback = xen_mcast_ctrl_changed;
err = register_xenbus_watch(&vif->mcast_ctrl_watch);
if (err) {
pr_err("Failed to set watcher %s\n",
vif->mcast_ctrl_watch.node);
kfree(node);
vif->mcast_ctrl_watch.node = NULL;
vif->mcast_ctrl_watch.callback = NULL;
}
return err;
}
开发者ID:gxt,项目名称:linux,代码行数:32,代码来源:xenbus.c
示例13: usb_read_work_fn
static void usb_read_work_fn(struct work_struct *work)
{
unsigned long flags;
struct diag_request *req = NULL;
struct diag_usb_info *ch = container_of(work, struct diag_usb_info,
read_work);
if (!ch)
return;
if (!ch->connected || !ch->enabled || ch->read_pending) {
pr_debug_ratelimited("diag: Discarding USB read, ch: %s connected: %d, enabled: %d, pending: %d\n",
ch->name, ch->connected, ch->enabled,
ch->read_pending);
return;
}
spin_lock_irqsave(&ch->lock, flags);
req = ch->read_ptr;
if (req) {
ch->read_pending = 1;
req->buf = ch->read_buf;
req->length = USB_MAX_OUT_BUF;
usb_diag_read(ch->hdl, req);
} else {
pr_err_ratelimited("diag: In %s invalid read req\n", __func__);
}
spin_unlock_irqrestore(&ch->lock, flags);
}
开发者ID:magnostik,项目名称:kernel-msm-3.10,代码行数:28,代码来源:diag_usb.c
示例14: msm_led_flash_subdev_ioctl
static long msm_led_flash_subdev_ioctl(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
struct msm_led_flash_ctrl_t *fctrl = NULL;
void __user *argp = (void __user *)arg;
if (!sd) {
pr_err("sd NULL\n");
return -EINVAL;
}
fctrl = v4l2_get_subdevdata(sd);
if (!fctrl) {
pr_err("fctrl NULL\n");
return -EINVAL;
}
switch (cmd) {
case VIDIOC_MSM_SENSOR_GET_SUBDEV_ID:
return fctrl->func_tbl->flash_get_subdev_id(fctrl, argp);
case VIDIOC_MSM_FLASH_LED_DATA_CFG:
return fctrl->func_tbl->flash_led_config(fctrl, argp);
case MSM_SD_SHUTDOWN:
*(int *)argp = MSM_CAMERA_LED_RELEASE;
return fctrl->func_tbl->flash_led_config(fctrl, argp);
default:
pr_err_ratelimited("invalid cmd %d\n", cmd);
return -ENOIOCTLCMD;
}
}
开发者ID:faizauthar12,项目名称:android_kernel_samsung_fortunave3g,代码行数:27,代码来源:msm_led_flash.c
示例15: msm_csid_subdev_ioctl32
static long msm_csid_subdev_ioctl32(struct v4l2_subdev *sd,
unsigned int cmd, void *arg)
{
int rc = -ENOIOCTLCMD;
struct csid_device *csid_dev = v4l2_get_subdevdata(sd);
mutex_lock(&csid_dev->mutex);
CDBG("%s:%d id %d\n", __func__, __LINE__, csid_dev->pdev->id);
switch (cmd) {
case VIDIOC_MSM_SENSOR_GET_SUBDEV_ID:
rc = msm_csid_get_subdev_id(csid_dev, arg);
break;
case VIDIOC_MSM_CSID_IO_CFG32:
rc = msm_csid_cmd32(csid_dev, arg);
break;
case VIDIOC_MSM_CSID_RELEASE:
case MSM_SD_SHUTDOWN:
rc = msm_csid_release(csid_dev);
break;
default:
pr_err_ratelimited("%s: command not found\n", __func__);
}
CDBG("%s:%d\n", __func__, __LINE__);
mutex_unlock(&csid_dev->mutex);
return rc;
}
开发者ID:LEPT-Development,项目名称:Android_kernel_lge_C50,代码行数:26,代码来源:msm_csid.c
示例16: diag_hsic_read_complete
static void diag_hsic_read_complete(void *ctxt, char *buf, int len,
int actual_size)
{
int err = 0;
int index = (int)(uintptr_t)ctxt;
struct diag_hsic_info *ch = NULL;
if (index < 0 || index >= NUM_HSIC_DEV) {
pr_err_ratelimited("diag: In %s, invalid HSIC index %d\n",
__func__, index);
return;
}
ch = &diag_hsic[index];
/*
* Don't pass on the buffer if the channel is closed when a pending read
* completes. Also, actual size can be negative error codes - do not
* pass on the buffer.
*/
if (!ch->opened || actual_size <= 0)
goto fail;
err = diag_remote_dev_read_done(ch->dev_id, buf, actual_size);
if (err)
goto fail;
return;
fail:
diagmem_free(driver, buf, ch->mempool);
queue_work(ch->hsic_wq, &ch->read_work);
return;
}
开发者ID:Sony-Kernels,项目名称:android_kernel_sony_msm8994_suzuran_6.0.x,代码行数:31,代码来源:diagfwd_hsic.c
示例17: dbg_save_state
static inline void dbg_save_state(int cpu)
{
int i, j;
i = cpu * MAX_DBG_REGS;
switch (dbg.arch) {
case ARM_DEBUG_ARCH_V8:
dbg_write(OSLOCK_MAGIC, DBGOSLAR);
isb();
dbg.state[i++] = dbg_read(DBGDSCRext);
for (j = 0; j < dbg.nr_bp; j++)
i = dbg_read_arch32_bxr(dbg.state, i, j);
for (j = 0; j < dbg.nr_wp; j++)
i = dbg_read_arch32_wxr(dbg.state, i, j);
dbg.state[i++] = dbg_read(DBGDCCINT);
dbg.state[i++] = dbg_read(DBGCLAIMCLR);
dbg.state[i++] = dbg_read(DBGOSECCR);
dbg.state[i++] = dbg_read(DBGDTRRXext);
dbg.state[i++] = dbg_read(DBGDTRTXext);
isb();
dbg_write(0x1, DBGOSDLR);
isb();
break;
default:
pr_err_ratelimited("unsupported dbg arch %d in %s\n", dbg.arch,
__func__);
}
}
开发者ID:SiddheshK15,项目名称:kernel_htc_820,代码行数:33,代码来源:jtagv8.c
示例18: ksb_tx_cb
static void ksb_tx_cb(struct urb *urb)
{
struct data_pkt *pkt = urb->context;
struct ks_bridge *ksb = pkt->ctxt;
dbg_log_event(ksb, "C TX_URB", urb->status, 0);
#if 0
dev_dbg(&ksb->udev->dev, "status:%d", urb->status);
#endif
if (test_bit(USB_DEV_CONNECTED, &ksb->flags))
usb_autopm_put_interface_async(ksb->ifc);
if (urb->status < 0)
pr_err_ratelimited("%s: urb failed with err:%d",
ksb->fs_dev.name, urb->status);
if ((ksb->ifc->cur_altsetting->desc.bInterfaceNumber == 2))
dev_info(ksb->fs_dev.this_device, "write: %d bytes", urb->actual_length);
ksb_free_data_pkt(pkt);
atomic_dec(&ksb->tx_pending_cnt);
wake_up(&ksb->pending_urb_wait);
}
开发者ID:lssjbrolli,项目名称:android_kernel_samsung_klimtlte,代码行数:25,代码来源:ks_bridge.c
示例19: ksb_start_rx_work
static void ksb_start_rx_work(struct work_struct *w)
{
struct ks_bridge *ksb =
container_of(w, struct ks_bridge, start_rx_work);
struct data_pkt *pkt;
struct urb *urb;
int i = 0;
int ret;
bool put = true;
ret = usb_autopm_get_interface(ksb->ifc);
if (ret < 0) {
if (ret != -EAGAIN && ret != -EACCES) {
pr_err_ratelimited("autopm_get failed:%d", ret);
return;
}
put = false;
}
for (i = 0; i < NO_RX_REQS; i++) {
if (!test_bit(USB_DEV_CONNECTED, &ksb->flags))
break;
pkt = ksb_alloc_data_pkt(MAX_DATA_PKT_SIZE, GFP_KERNEL, ksb);
if (IS_ERR(pkt)) {
pr_err("unable to allocate data pkt");
break;
}
urb = usb_alloc_urb(0, GFP_KERNEL);
if (!urb) {
pr_err("unable to allocate urb");
ksb_free_data_pkt(pkt);
break;
}
usb_fill_bulk_urb(urb, ksb->udev, ksb->in_pipe,
pkt->buf, pkt->len,
ksb_rx_cb, pkt);
usb_anchor_urb(urb, &ksb->submitted);
dbg_log_event(ksb, "S RX_URB", pkt->len, 0);
atomic_inc(&ksb->rx_pending_cnt);
ret = usb_submit_urb(urb, GFP_KERNEL);
if (ret) {
pr_err("in urb submission failed");
usb_unanchor_urb(urb);
usb_free_urb(urb);
ksb_free_data_pkt(pkt);
atomic_dec(&ksb->rx_pending_cnt);
wake_up(&ksb->pending_urb_wait);
break;
}
usb_free_urb(urb);
}
if (put)
usb_autopm_put_interface_async(ksb->ifc);
}
开发者ID:QweJay,项目名称:GT-I9505,代码行数:60,代码来源:ks_bridge.c
示例20: memset
static struct dst_entry *rxe_find_route6(struct net_device *ndev,
struct in6_addr *saddr,
struct in6_addr *daddr)
{
struct dst_entry *ndst;
struct flowi6 fl6 = { { 0 } };
memset(&fl6, 0, sizeof(fl6));
fl6.flowi6_oif = ndev->ifindex;
memcpy(&fl6.saddr, saddr, sizeof(*saddr));
memcpy(&fl6.daddr, daddr, sizeof(*daddr));
fl6.flowi6_proto = IPPROTO_UDP;
if (unlikely(ipv6_stub->ipv6_dst_lookup(sock_net(recv_sockets.sk6->sk),
recv_sockets.sk6->sk, &ndst, &fl6))) {
pr_err_ratelimited("no route to %pI6\n", daddr);
goto put;
}
if (unlikely(ndst->error)) {
pr_err("no route to %pI6\n", daddr);
goto put;
}
return ndst;
put:
dst_release(ndst);
return NULL;
}
开发者ID:avagin,项目名称:linux,代码行数:29,代码来源:rxe_net.c
注:本文中的pr_err_ratelimited函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论