libnet-functions.h

Go to the documentation of this file.
00001 /*
00002  *  $Id: libnet-functions.h,v 1.43 2004/11/09 07:05:07 mike Exp $
00003  *
00004  *  libnet-functions.h - function prototypes
00005  *
00006  *  Copyright (c) 1998 - 2004 Mike D. Schiffman <mike@infonexus.com>
00007  *  All rights reserved.
00008  *
00009  * Redistribution and use in source and binary forms, with or without
00010  * modification, are permitted provided that the following conditions
00011  * are met:
00012  * 1. Redistributions of source code must retain the above copyright
00013  *    notice, this list of conditions and the following disclaimer.
00014  * 2. Redistributions in binary form must reproduce the above copyright
00015  *    notice, this list of conditions and the following disclaimer in the
00016  *    documentation and/or other materials provided with the distribution.
00017  *
00018  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
00019  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00020  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
00021  * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
00022  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
00023  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
00024  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00025  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00026  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
00027  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
00028  * SUCH DAMAGE.
00029  *
00030  */
00031 
00032 #ifndef __LIBNET_FUNCTIONS_H
00033 #define __LIBNET_FUNCTIONS_H
00034 
00063 libnet_t *
00064 libnet_init(int injection_type, char *device, char *err_buf);
00065 
00071 void
00072 libnet_destroy(libnet_t *l);
00073 
00080 void
00081 libnet_clear_packet(libnet_t *l);
00082 
00089 void
00090 libnet_stats(libnet_t *l, struct libnet_stats *ls);
00091 
00097 int 
00098 libnet_getfd(libnet_t *l);
00099 
00106 const char *
00107 libnet_getdevice(libnet_t *l);
00108 
00117 u_int8_t *
00118 libnet_getpbuf(libnet_t *l, libnet_ptag_t ptag);
00119 
00128 u_int32_t
00129 libnet_getpbuf_size(libnet_t *l, libnet_ptag_t ptag);
00130 
00138 char *
00139 libnet_geterror(libnet_t *l);
00140 
00147 u_int32_t
00148 libnet_getpacket_size(libnet_t *l);
00149 
00155 int
00156 libnet_seed_prand(libnet_t *l);
00157 
00171 u_int32_t
00172 libnet_get_prand(int mod);
00173 
00195 int
00196 libnet_toggle_checksum(libnet_t *l, libnet_ptag_t ptag, int mode);
00197 
00210 char *
00211 libnet_addr2name4(u_int32_t in, u_int8_t use_name);
00212 
00226 u_int32_t
00227 libnet_name2addr4(libnet_t *l, char *host_name, u_int8_t use_name);
00228 
00229 extern const struct libnet_in6_addr in6addr_error;
00230 
00244 struct libnet_in6_addr
00245 libnet_name2addr6(libnet_t *l, char *host_name, u_int8_t use_name);
00246 
00250 void
00251 libnet_addr2name6_r(struct libnet_in6_addr addr, u_int8_t use_name,
00252 char *host_name, int host_name_len);
00253 
00269 int
00270 libnet_plist_chain_new(libnet_t *l, libnet_plist_t **plist, char *token_list);
00271 
00283 int
00284 libnet_plist_chain_next_pair(libnet_plist_t *plist, u_int16_t *bport, 
00285 u_int16_t *eport); 
00286 
00293 int
00294 libnet_plist_chain_dump(libnet_plist_t *plist);
00295 
00304 char *
00305 libnet_plist_chain_dump_string(libnet_plist_t *plist);
00306 
00312 int
00313 libnet_plist_chain_free(libnet_plist_t *plist);
00314 
00402 libnet_ptag_t
00403 libnet_build_802_1q(u_int8_t *dst, u_int8_t *src, u_int16_t tpi,
00404 u_int8_t priority, u_int8_t cfi, u_int16_t vlan_id, u_int16_t len_proto,
00405 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00406 
00418 libnet_ptag_t
00419 libnet_build_802_1x(u_int8_t eap_ver, u_int8_t eap_type, u_int16_t length, 
00420 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00421 
00433 libnet_ptag_t
00434 libnet_build_802_2(u_int8_t dsap, u_int8_t ssap, u_int8_t control,
00435 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00436 
00450 libnet_ptag_t
00451 libnet_build_802_2snap(u_int8_t dsap, u_int8_t ssap, u_int8_t control, 
00452 u_int8_t *oui, u_int16_t type, u_int8_t *payload, u_int32_t payload_s,
00453 libnet_t *l, libnet_ptag_t ptag); 
00454 
00470 libnet_ptag_t
00471 libnet_build_802_3(u_int8_t *dst, u_int8_t *src, u_int16_t len, 
00472 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00473 
00489 libnet_ptag_t
00490 libnet_build_ethernet(u_int8_t *dst, u_int8_t *src, u_int16_t type, 
00491 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00492 
00504 libnet_ptag_t
00505 libnet_autobuild_ethernet(u_int8_t *dst, u_int16_t type, libnet_t *l);
00506 
00523 libnet_ptag_t
00524 libnet_build_fddi(u_int8_t fc, u_int8_t *dst, u_int8_t *src, u_int8_t dsap,
00525 u_int8_t ssap, u_int8_t cf, u_int8_t *oui, u_int16_t type, u_int8_t *payload,
00526 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00527 
00540 libnet_ptag_t
00541 libnet_autobuild_fddi(u_int8_t fc, u_int8_t *dst, u_int8_t dsap, u_int8_t ssap,
00542 u_int8_t cf, u_int8_t *oui, u_int16_t type, libnet_t *l);
00543 
00563 libnet_ptag_t
00564 libnet_build_arp(u_int16_t hrd, u_int16_t pro, u_int8_t hln, u_int8_t pln,
00565 u_int16_t op, u_int8_t *sha, u_int8_t *spa, u_int8_t *tha, u_int8_t *tpa,
00566 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00567 
00580 libnet_ptag_t
00581 libnet_autobuild_arp(u_int16_t op, u_int8_t *sha, u_int8_t *spa, u_int8_t *tha,
00582 u_int8_t *tpa, libnet_t *l);
00583 
00601 libnet_ptag_t
00602 libnet_build_tcp(u_int16_t sp, u_int16_t dp, u_int32_t seq, u_int32_t ack,
00603 u_int8_t control, u_int16_t win, u_int16_t sum, u_int16_t urg, u_int16_t len, 
00604 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00605 
00621 libnet_ptag_t
00622 libnet_build_tcp_options(u_int8_t *options, u_int32_t options_s, libnet_t *l,
00623 libnet_ptag_t ptag);
00624 
00637 libnet_ptag_t
00638 libnet_build_udp(u_int16_t sp, u_int16_t dp, u_int16_t len, u_int16_t sum,
00639 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00640 
00660 libnet_ptag_t
00661 libnet_build_cdp(u_int8_t version, u_int8_t ttl, u_int16_t sum, u_int16_t type,
00662 u_int16_t len, u_int8_t *value, u_int8_t *payload, u_int32_t payload_s,
00663 libnet_t *l, libnet_ptag_t ptag);
00664 
00679 libnet_ptag_t
00680 libnet_build_icmpv4_echo(u_int8_t type, u_int8_t code, u_int16_t sum,
00681 u_int16_t id, u_int16_t seq, u_int8_t *payload, u_int32_t payload_s,
00682 libnet_t *l, libnet_ptag_t ptag);
00683 
00699 libnet_ptag_t
00700 libnet_build_icmpv4_mask(u_int8_t type, u_int8_t code, u_int16_t sum,
00701 u_int16_t id, u_int16_t seq, u_int32_t mask, u_int8_t *payload,
00702 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00703 
00717 libnet_ptag_t
00718 libnet_build_icmpv4_unreach(u_int8_t type, u_int8_t code, u_int16_t sum,
00719 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00720 
00735 libnet_ptag_t
00736 libnet_build_icmpv4_redirect(u_int8_t type, u_int8_t code, u_int16_t sum,
00737 u_int32_t gateway, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
00738 libnet_ptag_t ptag);
00739 
00754 libnet_ptag_t
00755 libnet_build_icmpv4_timeexceed(u_int8_t type, u_int8_t code, u_int16_t sum,
00756 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00757 
00775 libnet_ptag_t
00776 libnet_build_icmpv4_timestamp(u_int8_t type, u_int8_t code, u_int16_t sum,
00777 u_int16_t id, u_int16_t seq, n_time otime, n_time rtime, n_time ttime,
00778 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00779 
00792 libnet_ptag_t
00793 libnet_build_igmp(u_int8_t type, u_int8_t code, u_int16_t sum, u_int32_t ip,
00794 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00795 
00815 libnet_ptag_t 
00816 libnet_build_ipv4(u_int16_t ip_len, u_int8_t tos, u_int16_t id, u_int16_t frag,
00817 u_int8_t ttl, u_int8_t prot, u_int16_t sum, u_int32_t src, u_int32_t dst,
00818 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00819 
00838 libnet_ptag_t 
00839 libnet_build_ipv4_options(u_int8_t *options, u_int32_t options_s, libnet_t *l,
00840 libnet_ptag_t ptag);
00841 
00855 libnet_ptag_t
00856 libnet_autobuild_ipv4(u_int16_t len, u_int8_t prot, u_int32_t dst, libnet_t *l);
00857 
00873 libnet_ptag_t
00874 libnet_build_ipv6(u_int8_t tc, u_int32_t fl, u_int16_t len, u_int8_t nh,
00875 u_int8_t hl, struct libnet_in6_addr src, struct libnet_in6_addr dst, 
00876 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00877 
00890 libnet_ptag_t
00891 libnet_build_ipv6_frag(u_int8_t nh, u_int8_t reserved, u_int16_t frag,
00892 u_int32_t id, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
00893 libnet_ptag_t ptag);
00894 
00912 libnet_ptag_t
00913 libnet_build_ipv6_routing(u_int8_t nh, u_int8_t len, u_int8_t rtype,
00914 u_int8_t segments, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
00915 libnet_ptag_t ptag);
00916 
00930 libnet_ptag_t
00931 libnet_build_ipv6_destopts(u_int8_t nh, u_int8_t len, u_int8_t *payload,
00932 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00933 
00948 libnet_ptag_t
00949 libnet_build_ipv6_hbhopts(u_int8_t nh, u_int8_t len, u_int8_t *payload,
00950 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00951 
00961 libnet_ptag_t
00962 libnet_autobuild_ipv6(u_int16_t len, u_int8_t nh, struct libnet_in6_addr dst,
00963 libnet_t *l, libnet_ptag_t ptag);
00964 
00982 libnet_ptag_t
00983 libnet_build_isl(u_int8_t *dhost, u_int8_t type, u_int8_t user,
00984 u_int8_t *shost, u_int16_t len, u_int8_t *snap, u_int16_t vid,
00985 u_int16_t portindex, u_int16_t reserved, u_int8_t *payload,
00986 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
00987 
00999 libnet_ptag_t
01000 libnet_build_ipsec_esp_hdr(u_int32_t spi, u_int32_t seq, u_int32_t iv,
01001 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01002 
01014 libnet_ptag_t
01015 libnet_build_ipsec_esp_ftr(u_int8_t len, u_int8_t nh, int8_t *auth,
01016 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01017 
01032 libnet_ptag_t
01033 libnet_build_ipsec_ah(u_int8_t nh, u_int8_t len, u_int16_t res,
01034 u_int32_t spi, u_int32_t seq, u_int32_t auth, u_int8_t *payload,
01035 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01036 
01053 libnet_ptag_t
01054 libnet_build_dnsv4(u_int16_t h_len, u_int16_t id, u_int16_t flags,
01055 u_int16_t num_q, u_int16_t num_anws_rr, u_int16_t num_auth_rr,
01056 u_int16_t num_addi_rr, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01057 libnet_ptag_t ptag);
01058 
01076 libnet_ptag_t
01077 libnet_build_rip(u_int8_t cmd, u_int8_t version, u_int16_t rd, u_int16_t af,
01078 u_int16_t rt, u_int32_t addr, u_int32_t mask, u_int32_t next_hop,
01079 u_int32_t metric, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01080 libnet_ptag_t ptag);
01081 
01104 libnet_ptag_t
01105 libnet_build_rpc_call(u_int32_t rm, u_int32_t xid, u_int32_t prog_num,
01106 u_int32_t prog_vers, u_int32_t procedure, u_int32_t cflavor, u_int32_t clength,
01107 u_int8_t *cdata, u_int32_t vflavor, u_int32_t vlength, u_int8_t *vdata,
01108 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01109 
01132 libnet_ptag_t
01133 libnet_build_stp_conf(u_int16_t id, u_int8_t version, u_int8_t bpdu_type,
01134 u_int8_t flags, u_int8_t *root_id, u_int32_t root_pc, u_int8_t *bridge_id,
01135 u_int16_t port_id, u_int16_t message_age, u_int16_t max_age, 
01136 u_int16_t hello_time, u_int16_t f_delay, u_int8_t *payload,
01137 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01138 
01152 libnet_ptag_t
01153 libnet_build_stp_tcn(u_int16_t id, u_int8_t version, u_int8_t bpdu_type,
01154 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01155 
01173 libnet_ptag_t
01174 libnet_build_token_ring(u_int8_t ac, u_int8_t fc, u_int8_t *dst, u_int8_t *src,
01175 u_int8_t dsap, u_int8_t ssap, u_int8_t cf, u_int8_t *oui, u_int16_t type,
01176 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01177 
01191 libnet_ptag_t
01192 libnet_autobuild_token_ring(u_int8_t ac, u_int8_t fc, u_int8_t *dst, 
01193 u_int8_t dsap, u_int8_t ssap, u_int8_t cf, u_int8_t *oui, u_int16_t type,
01194 libnet_t *l);
01195 
01215 libnet_ptag_t
01216 libnet_build_vrrp(u_int8_t version, u_int8_t type, u_int8_t vrouter_id,
01217 u_int8_t priority, u_int8_t ip_count, u_int8_t auth_type, u_int8_t advert_int,
01218 u_int16_t sum, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01219 libnet_ptag_t ptag);
01220 
01233 libnet_ptag_t
01234 libnet_build_mpls(u_int32_t label, u_int8_t experimental, u_int8_t bos,
01235 u_int8_t ttl, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01236 libnet_ptag_t ptag);
01237 
01265 libnet_ptag_t
01266 libnet_build_ntp(u_int8_t leap_indicator, u_int8_t version, u_int8_t mode,
01267 u_int8_t stratum, u_int8_t poll, u_int8_t precision, u_int16_t delay_int,
01268 u_int16_t delay_frac, u_int16_t dispersion_int, u_int16_t dispersion_frac,
01269 u_int32_t reference_id, u_int32_t ref_ts_int, u_int32_t ref_ts_frac,
01270 u_int32_t orig_ts_int, u_int32_t orig_ts_frac, u_int32_t rec_ts_int,
01271 u_int32_t rec_ts_frac, u_int32_t xmt_ts_int, u_int32_t xmt_ts_frac,
01272 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01273 
01287 libnet_ptag_t
01288 libnet_build_ospfv2(u_int16_t len, u_int8_t type, u_int32_t rtr_id,
01289 u_int32_t area_id, u_int16_t sum, u_int16_t autype, u_int8_t *payload,
01290 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01291 
01306 libnet_ptag_t
01307 libnet_build_ospfv2_hello(u_int32_t netmask, u_int16_t interval, u_int8_t opts,
01308 u_int8_t priority, u_int dead_int, u_int32_t des_rtr, u_int32_t bkup_rtr,
01309 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01310  
01322 libnet_ptag_t
01323 libnet_build_ospfv2_dbd(u_int16_t dgram_len, u_int8_t opts, u_int8_t type,
01324 u_int seqnum, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01325 libnet_ptag_t ptag);
01326  
01337 libnet_ptag_t
01338 libnet_build_ospfv2_lsr(u_int type, u_int lsid, u_int32_t advrtr,
01339 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01340  
01349 libnet_ptag_t
01350 libnet_build_ospfv2_lsu(u_int num, u_int8_t *payload, u_int32_t payload_s,
01351 libnet_t *l, libnet_ptag_t ptag);
01352 
01368 libnet_ptag_t
01369 libnet_build_ospfv2_lsa(u_int16_t age, u_int8_t opts, u_int8_t type,
01370 u_int lsid, u_int32_t advrtr, u_int seqnum, u_int16_t sum, u_int16_t len,
01371 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01372  
01387 libnet_ptag_t
01388 libnet_build_ospfv2_lsa_rtr(u_int16_t flags, u_int16_t num, u_int id,
01389 u_int data, u_int8_t type, u_int8_t tos, u_int16_t metric, u_int8_t *payload,
01390 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01391  
01401 libnet_ptag_t
01402 libnet_build_ospfv2_lsa_net(u_int32_t nmask, u_int rtrid, u_int8_t *payload,
01403 u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01404  
01415 libnet_ptag_t
01416 libnet_build_ospfv2_lsa_sum(u_int32_t nmask, u_int metric, u_int tos,
01417 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01418  
01430 libnet_ptag_t
01431 libnet_build_ospfv2_lsa_as(u_int32_t nmask, u_int metric, u_int32_t fwdaddr,
01432 u_int tag, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01433 libnet_ptag_t ptag);
01434 
01445 libnet_ptag_t
01446 libnet_build_data(u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01447 libnet_ptag_t ptag);
01448 
01470 libnet_ptag_t
01471 libnet_build_dhcpv4(u_int8_t opcode, u_int8_t htype, u_int8_t hlen,
01472 u_int8_t hopcount, u_int32_t xid, u_int16_t secs, u_int16_t flags,
01473 u_int32_t cip, u_int32_t yip,  u_int32_t sip, u_int32_t gip, u_int8_t *chaddr,
01474 u_int8_t *sname, u_int8_t *file, u_int8_t *payload, u_int32_t payload_s, 
01475 libnet_t *l, libnet_ptag_t ptag);
01476 
01498 libnet_ptag_t
01499 libnet_build_bootpv4(u_int8_t opcode, u_int8_t htype, u_int8_t hlen,
01500 u_int8_t hopcount, u_int32_t xid, u_int16_t secs, u_int16_t flags,
01501 u_int32_t cip, u_int32_t yip,  u_int32_t sip, u_int32_t gip, u_int8_t *chaddr,
01502 u_int8_t *sname, u_int8_t *file, u_int8_t *payload, u_int32_t payload_s, 
01503 libnet_t *l, libnet_ptag_t ptag);
01504 
01509 u_int32_t
01510 libnet_getgre_length(u_int16_t fv);
01511 
01534 libnet_ptag_t
01535 libnet_build_gre(u_int16_t fv, u_int16_t type, u_int16_t sum,
01536 u_int16_t offset, u_int32_t key, u_int32_t seq, u_int16_t len,
01537 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01538 
01560 libnet_ptag_t
01561 libnet_build_egre(u_int16_t fv, u_int16_t type, u_int16_t sum,
01562 u_int16_t offset, u_int32_t key, u_int32_t seq, u_int16_t len,
01563 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01564 
01576 libnet_ptag_t
01577 libnet_build_gre_sre(u_int16_t af, u_int8_t offset, u_int8_t length,
01578 u_int8_t *routing, u_int8_t *payload, u_int32_t payload_s, libnet_t *l,
01579 libnet_ptag_t ptag);
01580 
01586 libnet_ptag_t
01587 libnet_build_gre_last_sre(libnet_t *l, libnet_ptag_t ptag);
01588 
01610 libnet_ptag_t
01611 libnet_build_bgp4_header(u_int8_t marker[LIBNET_BGP4_MARKER_SIZE],
01612 u_int16_t len, u_int8_t type, u_int8_t *payload, u_int32_t payload_s,
01613 libnet_t *l, libnet_ptag_t ptag);
01614 
01631 libnet_ptag_t
01632 libnet_build_bgp4_open(u_int8_t version, u_int16_t src_as, u_int16_t hold_time,
01633 u_int32_t bgp_id, u_int8_t opt_len, u_int8_t *payload, u_int32_t payload_s,
01634 libnet_t *l, libnet_ptag_t ptag);
01635 
01651 libnet_ptag_t
01652 libnet_build_bgp4_update(u_int16_t unfeasible_rt_len, u_int8_t *withdrawn_rt,
01653 u_int16_t total_path_attr_len, u_int8_t *path_attributes, u_int16_t info_len,
01654 u_int8_t *reachability_info, u_int8_t *payload, u_int32_t payload_s,
01655 libnet_t *l, libnet_ptag_t ptag);
01656 
01669 libnet_ptag_t
01670 libnet_build_bgp4_notification(u_int8_t err_code, u_int8_t err_subcode,
01671 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01672 
01694 libnet_ptag_t
01695 libnet_build_sebek(u_int32_t magic, u_int16_t version, u_int16_t type, 
01696 u_int32_t counter, u_int32_t time_sec, u_int32_t time_usec, u_int32_t pid,
01697 u_int32_t uid, u_int32_t fd, u_int8_t cmd[SEBEK_CMD_LENGTH], u_int32_t length, 
01698 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01699 
01719 libnet_ptag_t
01720 libnet_build_hsrp(u_int8_t version, u_int8_t opcode, u_int8_t state, 
01721 u_int8_t hello_time, u_int8_t hold_time, u_int8_t priority, u_int8_t group,
01722 u_int8_t reserved, u_int8_t authdata[HSRP_AUTHDATA_LENGTH], u_int32_t virtual_ip,
01723 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01724 
01739 libnet_ptag_t
01740 libnet_build_link(u_int8_t *dst, u_int8_t *src, u_int8_t *oui, u_int16_t type, 
01741 u_int8_t *payload, u_int32_t payload_s, libnet_t *l, libnet_ptag_t ptag);
01742 
01753 libnet_ptag_t
01754 libnet_autobuild_link(u_int8_t *dst, u_int8_t *oui, u_int16_t type,
01755 libnet_t *l);
01756 
01769 int
01770 libnet_write(libnet_t *l);
01771 
01781 u_int32_t
01782 libnet_get_ipaddr4(libnet_t *l);
01783 
01789 struct libnet_in6_addr
01790 libnet_get_ipaddr6(libnet_t *l);
01791 
01800 struct libnet_ether_addr *
01801 libnet_get_hwaddr(libnet_t *l);
01802 
01812 u_int8_t *
01813 libnet_hex_aton(const char *s, int *len);
01814 
01819 const char *
01820 libnet_version(void);
01821 
01837 int
01838 libnet_adv_cull_packet(libnet_t *l, u_int8_t **packet, u_int32_t *packet_s);
01839 
01852 int
01853 libnet_adv_cull_header(libnet_t *l, libnet_ptag_t ptag, u_int8_t **header,
01854 u_int32_t *header_s);
01855 
01869 int
01870 libnet_adv_write_link(libnet_t *l, u_int8_t *packet, u_int32_t packet_s);
01871 
01885 int
01886 libnet_adv_write_raw_ipv4(libnet_t *l, u_int8_t *packet, u_int32_t packet_s);
01887 
01894 void
01895 libnet_adv_free_packet(libnet_t *l, u_int8_t *packet);
01896 
01910 int 
01911 libnet_cq_add(libnet_t *l, char *label);
01912 
01927 libnet_t *
01928 libnet_cq_remove(libnet_t *l);
01929 
01941 libnet_t *
01942 libnet_cq_remove_by_label(char *label);
01943  
01950 const char *
01951 libnet_cq_getlabel(libnet_t *l);
01952  
01959 libnet_t *
01960 libnet_cq_find_by_label(char *label);
01961   
01967 void
01968 libnet_cq_destroy(void);
01969 
01989 libnet_t *
01990 libnet_cq_head(void);
01991 
01997 int
01998 libnet_cq_last(void);
01999 
02005 libnet_t *
02006 libnet_cq_next(void);
02007 
02013 u_int32_t
02014 libnet_cq_size(void);
02015 
02019 u_int32_t
02020 libnet_cq_end_loop(void);
02021 
02027 void
02028 libnet_diag_dump_context(libnet_t *l);
02029 
02035 void
02036 libnet_diag_dump_pblock(libnet_t *l);
02037 
02044 char *
02045 libnet_diag_dump_pblock_type(u_int8_t type);
02046 
02060 void
02061 libnet_diag_dump_hex(u_int8_t *packet, u_int32_t len, int swap, FILE *stream);
02062 
02063 /*
02064  * [Internal] 
02065  */
02066 int
02067 libnet_write_raw_ipv4(libnet_t *l, u_int8_t *packet, u_int32_t size);
02068 
02069 /*
02070  * [Internal] 
02071  */
02072 int
02073 libnet_write_raw_ipv6(libnet_t *l, u_int8_t *packet, u_int32_t size);
02074 
02075 /*
02076  * [Internal] 
02077  */
02078 int
02079 libnet_write_link(libnet_t *l, u_int8_t *packet, u_int32_t size);
02080 
02081 #if ((__WIN32__) && !(__CYGWIN__))
02082 /*
02083  * [Internal] 
02084  */
02085 SOCKET
02086 libnet_open_raw4(libnet_t *l);
02087 #else
02088 /*
02089  * [Internal] 
02090  */
02091 int
02092 libnet_open_raw4(libnet_t *l);
02093 #endif
02094 
02095 /*
02096  * [Internal] 
02097  */
02098 int
02099 libnet_close_raw4(libnet_t *l);
02100 
02101 /*
02102  * [Internal] 
02103  */
02104 int
02105 libnet_open_raw6(libnet_t *l);
02106        
02107 /*
02108  * [Internal] 
02109  */
02110 int
02111 libnet_close_raw6(libnet_t *l);
02112 
02113 /*
02114  * [Internal] 
02115  */
02116 int
02117 libnet_select_device(libnet_t *l);
02118 
02119 /*
02120  * [Internal] 
02121  */
02122 int
02123 libnet_open_link(libnet_t *l);
02124 
02125 /*
02126  * [Internal] 
02127  */
02128 int
02129 libnet_close_link(libnet_t *l);
02130 
02131 /*
02132  * [Internal] 
02133  */
02134 int
02135 libnet_do_checksum(libnet_t *l, u_int8_t *packet, int protocol, int len);
02136 
02137 /*
02138  * [Internal] 
02139  */
02140 u_int32_t
02141 libnet_compute_crc(u_int8_t *buf, u_int32_t len);
02142 
02143 /*
02144  * [Internal] 
02145  */
02146 u_int16_t
02147 libnet_ip_check(u_int16_t *addr, int len);
02148 
02149 /*
02150  * [Internal] 
02151  */
02152 int
02153 libnet_in_cksum(u_int16_t *addr, int len);
02154 
02155 /*
02156  * [Internal] 
02157  * If ptag is 0, function will create a pblock for the protocol unit type,
02158  * append it to the list and return a pointer to it.  If ptag is not 0,
02159  * function will search the pblock list for the specified protocol block 
02160  * and return a pointer to it.
02161  */
02162 libnet_pblock_t *
02163 libnet_pblock_probe(libnet_t *l, libnet_ptag_t ptag, u_int32_t n, 
02164 u_int8_t type);
02165 
02166 /*
02167  * [Internal] 
02168  * Function creates the pblock list if l->protocol_blocks == NULL or appends
02169  * an entry to the doubly linked list.
02170  */
02171 libnet_pblock_t *
02172 libnet_pblock_new(libnet_t *l, u_int32_t size);
02173 
02174 /*
02175  * [Internal] 
02176  * Function swaps two pblocks in memory.
02177  */
02178 int
02179 libnet_pblock_swap(libnet_t *l, libnet_ptag_t ptag1, libnet_ptag_t ptag2);
02180 
02181 /*
02182  * [Internal] 
02183  * Function inserts a pblock into the doubly linked list.
02184  */
02185 int
02186 libnet_pblock_insert_before(libnet_t *l, libnet_ptag_t ptag1,
02187 libnet_ptag_t ptag2);
02188 
02189 /*
02190  * [Internal] 
02191  * Function removes a pblock from context 
02192  */
02193 void
02194 libnet_pblock_delete(libnet_t *l, libnet_pblock_t *p);
02195 
02196 /*
02197  * [Internal] 
02198  * Function updates the pblock meta-inforation.  Internally it updates the
02199  * ptag with a monotonically increasing variable kept in l.  This way each
02200  * pblock has a succesively increasing ptag identifier.
02201  */
02202 libnet_ptag_t
02203 libnet_pblock_update(libnet_t *l, libnet_pblock_t *p, u_int32_t h, 
02204 u_int8_t type);
02205 
02206 
02207  /*
02208   * [Internal]
02209   * Checksums are a real pain in the <beep>!!!
02210   * Function updates referer used to compute the checksum. All
02211   * pblock need to know where is their referer (ie IP header).
02212   * So, this function is called each time a new IP header is inserted.
02213   * It updates the ip_offset field (referer) of each previous pblock.
02214   */
02215 void
02216 libnet_pblock_record_ip_offset(libnet_t *l, libnet_pblock_t *p);
02217 
02218 /*
02219  * [Internal] 
02220  * Function locates a given block by it's ptag. 
02221  */
02222 libnet_pblock_t *
02223 libnet_pblock_find(libnet_t *l, libnet_ptag_t ptag);
02224 
02225 /*
02226  * [Internal] 
02227  * Function copies protocol block data over.
02228  */
02229 int
02230 libnet_pblock_append(libnet_t *l, libnet_pblock_t *p, u_int8_t *buf,
02231 u_int32_t len);
02232 
02233 /*
02234  * [Internal] 
02235  * Function sets pblock flags.
02236  */
02237 void
02238 libnet_pblock_setflags(libnet_pblock_t *p, u_int8_t flags);
02239 
02240 /*
02241  * [Internal] 
02242  * Function returns the protocol number for the protocol block type.  If
02243  * the type is unknown, the function defaults to returning IPPROTO_IP.
02244  */
02245 int
02246 libnet_pblock_p2p(u_int8_t type);
02247 
02248 /*
02249  * [Internal] 
02250  * Function assembles the packet for subsequent writing.  Function makes two
02251  * passes through the pblock list:
02252  */
02253 int
02254 libnet_pblock_coalesce(libnet_t *l, u_int8_t **packet, u_int32_t *size);
02255 
02256 #if !(__WIN32__)
02257 /*
02258  * [Internal] 
02259  * By testing if we can retrieve the FLAGS of an iface
02260  * we can know if it exists or not and if it is up.
02261  */
02262 int
02263 libnet_check_iface(libnet_t *l);
02264 #endif
02265 
02266 #if defined(__WIN32__)
02267 /*
02268  * [Internal] 
02269  */
02270 BYTE *
02271 libnet_win32_get_remote_mac(libnet_t *l, DWORD IP);
02272 
02273 /*
02274  * [Internal] 
02275  */
02276 int
02277 libnet_close_link_interface(libnet_t *l);
02278 
02279 /*
02280  * [Internal] 
02281  */
02282 BYTE * 
02283 libnet_win32_read_arp_table(DWORD IP);
02284 #endif
02285 #endif  /* __LIBNET_FUNCTIONS_H */
02286 
02287 /* EOF */

Generated on Mon May 11 17:22:06 2009 for libnet by  doxygen 1.5.3