• 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
ipf_inject_input return error 45
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

ipf_inject_input return error 45


  • Subject: ipf_inject_input return error 45
  • From: "Mike C." <email@hidden>
  • Date: Thu, 08 Dec 2011 13:02:59 +0100

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!
Mike
 _______________________________________________
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: Vincent Lubet <email@hidden>
  • Next by Date: Re: ipf_inject_input return error 45
  • Next by thread: Re: ipf_inject_input return error 45
  • Index(es):
    • Date
    • Thread