Update readme.md

This commit is contained in:
郑超
2022-08-02 03:15:32 +00:00
parent 61e3c264f3
commit 649d29e538

View File

@@ -13,4 +13,68 @@ The stellar components are:
- **Active Queue Management** is queue management algorithm libraries that schedule packets by buffering, forwarding, marking, or dropping. A plugin creates a queue instance and enqueues packets as its needs.
- Question: Who consumes the dequeue events?
![stellar-high-level-design](./docs/imgs/stellar-high-level-design.svg)
![stellar-high-level-design](./docs/imgs/stellar-high-level-design.svg)
## Packet IO Library
```
struct packet
{
enum io_type type;
void *raw_pkt;
}
packet_io_loop()
{
packet_io_rx(&rx_pkt)
//ingress processing: Tunnel decoding, IP defragmentation
session_manager();
plugin_manager();
//egress processing: AMQ
rl_group_id=pkt_get_group_id(rx_pkt);
void *raw_pkt=pkt_get_raw(rx_pkt);
AMQ_enqueue(group_id[], raw_pkt, pkt_sz);
}
```
## Plugin Manager
Plugin Management APIs
```
pm_session_dettach_me(pm, session);
pm_session_dettach_others(pm, session);
```
## Session Manager
Session Management APIs
```
session_drop_current_packet(session);
session_set_ratelimit_group(session, rl_group_id);
session_set_metadata(session, const char *key, void *value, size_t val_sz, free_callback);
session_get_metadata(session, const char *key, void **value, size_t *val_sz);
session_del_metadata(session, key)
session_lock(session, plug_id);
session_unlock(session, plug_id);
```
Plugin Example
```
plugin_entry(session, pme)
{
session_get_metadata(session, "fw_action", value);
if(value==INTERCEPT)
{
//pm_session_dettach_me(session);
return;
}
ret=check_security_policy(session);
if(ret==INTERCEPT)
{
pm_session_dettach_others(session);
}
else if(ret==RATE_LIMIT)
{
group_id=security_policy_id;
amq_group_create(group_id, CIR, CBS);
session_set_ratelimit_group(session, group_id);
}
}
```