Question about which tools to use, bugs, the best way to implement a function, etc should go here. Don't forget to see if your question is answered in the wiki first! When in doubt post here.
Like I said, you must read "CURRENT" pointer from page1, and deal with that. Otherwise you'll end up reading at most one packet per interrupt, and that won't work, because any interrupt might indicate any amount of packets.
You could look into the driver code I posted.
The real problem with goto is not with the control transfer, but with environments. Properly tail-recursive closures get both right.