• Open Menu Close Menu
  • Apple
  • Shopping Bag
  • Apple
  • Mac
  • iPad
  • iPhone
  • Watch
  • TV
  • Music
  • Support
  • Search apple.com
  • Shopping Bag

Lists

Open Menu Close Menu
  • Terms and Conditions
  • Lists hosted on this site
  • Email the Postmaster
  • Tips for posting to public mailing lists
Re: ipf_inject_input return error 45
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: ipf_inject_input return error 45


  • Subject: Re: ipf_inject_input return error 45
  • From: Vincent Lubet <email@hidden>
  • Date: Thu, 8 Dec 2011 09:39:19 -0800

Mike,

ENOTSUP is returned by ipf_inject_input() when the packet is not an IPv4 or IPv6 packet. You need to make sure the mbuf data pointer points to the start of the IPv4 or IPv6 packet.

Vincent

Le Dec 8, 2011 à 4:02 AM, Mike C. a écrit :

> Hello,
>
> I am working on a Network Kernel Extension that re-injects packets
> after they have been captured with an IP Filter. However, the
> re-injection doesn't work. ipf_inject_input always returns error code
> 45, which means "Operation not supported". What am I doing wrong? Here
> is my setup and (simplified) code:
>
> mbuf_t *saved_packet = NULL;
>
> // function called by ip filter when new ip packet arrives
> errno_t input_fn(void *cookie, mbuf_t *data, int offset, u_int8_t protocol) {
>
>    // test, if packet is interesting for us
>    // [...]
>
>    if (saved_packet != NULL) {
>        // Drop
>        return -1;
>    }
>
>    // keep reference to packet for later injection
>    saved_packet = data;
>
>    // send packet to usermode for further processing
>    mbuf_t new_mbuf;
>    mbuf_dup(*data, MBUF_WAITOK, &new_mbuf);
>    if (ctl_enqueuembuf(ctlref, ctrl_unit, new_mbuf, 0) != 0) {
>        // error, drop packet
>        saved_packet = NULL;
>        retrun -1;
>    }
>
>    // EJUSTRETURN = the packet will not be freed
>    return EJUSTRETURN;
> }
>
>
> // function called when usermode sends processing result back
> errno_t ctl_send_fn(kern_ctl_ref kctlref, u_int32_t unit, void
> *unitinfo, mbuf_t m, int flags) {
>    int result;
>    mbuf_copydata(m, 0, sizeof(result), &result);
>
>    if (result == 1) {
>
>        // the following call returns 45 ("Operation not supported") - WHY??
>        errno_t errno = ipf_inject_input(*saved_packet, installed_filter);
>
>        saved_packet = NULL;
>    } else {
>        // [...]
>    }
>
>    return 0;
> }
>
> Where is my mistake? Your help is greatly appreciated!

 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Darwin-kernel mailing list      (email@hidden)
Help/Unsubscribe/Update your Subscription:

This email sent to email@hidden

  • Follow-Ups:
    • Re: ipf_inject_input return error 45
      • From: "Mike C." <email@hidden>
References: 
 >ipf_inject_input return error 45 (From: "Mike C." <email@hidden>)

  • Prev by Date: ipf_inject_input return error 45
  • Next by Date: Re: ipf_inject_input return error 45
  • Previous by thread: ipf_inject_input return error 45
  • Next by thread: Re: ipf_inject_input return error 45
  • Index(es):
    • Date
    • Thread