Can't delete lease via api

Hi,
I’m trying to delete lease via api. I’m using this php library.
First I query the lease I want to delete:

PEAR2\Net\RouterOS\Request Object
(
    [_command:PEAR2\Net\RouterOS\Request:private] => /ip/dhcp-server/lease/print
    [_query:PEAR2\Net\RouterOS\Request:private] => PEAR2\Net\RouterOS\Query Object
        (
            [words:protected] => Array
                (
                    [0] => Array
                        (
                            [0] => dynamic
                            [1] => true
                        )

                    [1] => Array
                        (
                            [0] => mac-address
                            [1] => 11:11:11:11:11:15
                        )

                    [2] => Array
                        (
                            [0] => #&
                            [1] => 
                        )

                )

        )

    [arguments:protected] => Array
        (
        )

    [_tag:PEAR2\Net\RouterOS\Message:private] => 
)
PEAR2\Net\RouterOS\ResponseCollection Object
(
    [responses:protected] => Array
        (
            [0] => PEAR2\Net\RouterOS\Response Object
                (
                    [unrecognizedWords:protected] => Array
                        (
                        )

Then I get response with .id, which is what i need:

 [_type:PEAR2\Net\RouterOS\Response:private] => !re
                    [arguments:protected] => Array
                        (
                            [.id] => *3C8D
                            [list] => allowed
                            [address] => 111.111.10.10
                            [dynamic] => false
                            [disabled] => false
                        )

                    [_tag:PEAR2\Net\RouterOS\Message:private] => 
                )

            [1] => PEAR2\Net\RouterOS\Response Object
                (
                    [unrecognizedWords:protected] => Array
                        (
                        )

                    [_type:PEAR2\Net\RouterOS\Response:private] => !done
                    [arguments:protected] => Array
                        (
                        )

                    [_tag:PEAR2\Net\RouterOS\Message:private] => 
                )

        )

    [responseTypes:protected] => Array
        (
            [0] => !re
            [1] => !done
        )

    [responseTags:protected] => Array
        (
            [0] => 
            [1] => 
        )

    [argumentMap:protected] => 
    [position:protected] => 0
)

Then i try to request the removal:

PEAR2\Net\RouterOS\Request Object
(
    [_command:PEAR2\Net\RouterOS\Request:private] => /ip/dhcp-server/lease/remove
    [_query:PEAR2\Net\RouterOS\Request:private] => 
    [arguments:protected] => Array
        (
            [.id] => *3C8D
        )

    [_tag:PEAR2\Net\RouterOS\Message:private] => 
)

And !trap comes as a response (no such item)

PEAR2\Net\RouterOS\ResponseCollection Object
(
    [responses:protected] => Array
        (
            [0] => PEAR2\Net\RouterOS\Response Object
                (
                    [unrecognizedWords:protected] => Array
                        (
                        )

                    [_type:PEAR2\Net\RouterOS\Response:private] => !trap
                    [arguments:protected] => Array
                        (
                            [category] => 4
                            [message] => no such item (4)
                        )

                    [_tag:PEAR2\Net\RouterOS\Message:private] => 
                )

            [1] => PEAR2\Net\RouterOS\Response Object
                (
                    [unrecognizedWords:protected] => Array
                        (
                        )

                    [_type:PEAR2\Net\RouterOS\Response:private] => !done
                    [arguments:protected] => Array
                        (
                        )

                    [_tag:PEAR2\Net\RouterOS\Message:private] => 
                )

        )

    [responseTypes:protected] => Array
        (
            [0] => !trap
            [1] => !done
        )

    [responseTags:protected] => Array
        (
            [0] => 
            [1] => 
        )

    [argumentMap:protected] => 
    [position:protected] => 0
)

Can sb give me hint about what i’m doing wrong?
Thanks

Strange. Looking at the output you’ve dumped, it seems like the query is not matching a dynamic entry. I mean:

    [_query:PEAR2\Net\RouterOS\Request:private] => PEAR2\Net\RouterOS\Query Object
        (
            [words:protected] => Array
                (
                    [0] => Array
                        (
                            [0] => dynamic
                            [1] => true
                        )

vs.

 [_type:PEAR2\Net\RouterOS\Response:private] => !re
                    [arguments:protected] => Array
                        (
                            [.id] => *3C8D
                            [list] => allowed
                            [address] => 111.111.10.10
                            [dynamic] => false

(notice the last line)

Which RouterOS version are you using? Perhaps in that version, the string “true” is not recognized as a boolean true… try using “yes” instead.

(Well… that’s what has worked for me at least…)


The only (other?) ways I’ve seen this error pop up is if

  • You’re attempting to delete an entry that has already expired (or is about to expire in this second) and was thus automatically deleted before the remove request took place.
  • Between the print request and remove request, you’ve moved around entries, and thus the ID no longer matches the previously printed one.