At the close Bangladesh, replying to England's 599 for six declared, were struggling at 154 for five with only opener Tamin Iqbal standing firm.
Tamim was unbeaten on 81 after Paul Collingwood [ Images ] had collected his 10th Test century to lift England to a huge first- innings total.
Facing an uphill task to avoid the follow-on, Bangladesh suffered an early setback when fast bowler Broad dismissed opener Imrul Kayes (4) and Junaid Siddique (7) with short-pitched deliveries before Swann continued his remarkable record of capturing a wicket in his opening over.
Swann had Aftab Ahmed (1) caught by Ian Bell [ Images ] at leg-slip to give the off-spinner a wicket with his fifth ball after the tea break and reduce Bangladesh to 51 for three.
Tamim then shared a 94-run partnership with Mahmudullah (51) to repair the damage before Swann struck again.
Mahmudullah, who had raced to his fifty off 54 balls with seven cleanly struck boundaries and a six, attempted a sweep shot but managed only to glove the ball to Collingwood at slip.
Skipper Shakib Al Hasan survived some anxious moments before he was bowled by Swann for one attempting to drive.
Swann could have added another wicket but nightwatchman Shahadat Hossain was given the benefit of the doubt by the third umpire when England appealed for a catch at silly point.
Collingwood, 32 not out overnight, punished the innocuous Bangladesh bowling with 145 from 188 balls.
He completed his century with a single off Shahadat and Ian Bell, his partner in the 184-run fifth wicket stand, drove the next ball to the cover boundary to bring up his fifty.
"This is a special century for me," Collingwood told reporters. "It is test cricket and to get 10 centuries, it is something I thought I'd never achieve when I first started the game,"
"I've not had a hundred for a little while, so I wanted to make sure I got there and it was a special one for me. I'm not going to rank it as the best or the worst or even the easiest, I think that is a little bit unfair," he said.
"I don't want anything to be taken away from our performance and the way we've approached the game," he said.
Collingwood, who hit 10 fours and four sixes, had one let- off when Shakib dropped a return catch when the batsman was on 119.
Wicketkeeper Mushfiqur Rahim fumbled a chance off Bell when he was on 64 off Razzak and he was again dropped by Rubel Hossain off Shakib. Rubel made amends for his mistake with the next ball to catch Bell for 84 and Alastair Cook [ Images ] declared the innings immediately.
Earlier, Cook fell short of a double century when off-spinner Mahmudullah had him caught and bowled for 173.
Cook, resuming on 158 not out, eased past his previous test-best score of 160 but an attempted pull caught the leading edge and Mahmudullah took a simple catch. Cook struck 16 fours and two sixes in his 283-ball knock.
Bangladesh all-rounder Mahmudullah refused to give up hope.
"We have got some depth in our batting. Still Mushfiqur (Rahim) and Naeem (Islam) are to come. Tamim is still there. If we are able to bat properly we can achieve a good total," he said.
"In New Zealand [ Images ] a couple of weeks ago there was a situation like this and made a very good recovery."
England (1st innings): (overnight 374-3)
A. Cook c & b Mahmudullah 173
M. Carberry lbw b Mahmudullah 30
J. Trott c Rahim b Rubel 39
K. Pietersen b Razzak 99
P. Collingwood c Iqbal b Razzak 145
I. Bell c Hossain b Shakib 84
M. Prior not out 0
Extras: (b-6, lb-9, w-3, n-11) 29
Total: (for 6 wickets) 599
Fall of wickets: 1-72, 2-149, 3-319, 4-412, 5-596, 6-599
To bat: S. Broad, T. Bresnan, G. Swann, S. Finn.
Bowling: Shahadat 17-2-73-0, Rubel 19-0-96-1, Shakib 34.3-4-133-1, Naeem 12-1-43-0, Mahmudullah 23-1-78-2, Razzak 31-1-157-2, Aftab 1-0-2-0, Tamim 1-0-2-0.
Bangladesh (1st innings):
T. Iqbal not out 81
I. Kayes c Prior b Broad 4
Z. Siddique c and b Broad 7
A. Ahmed c Bell b Swann 1
Mahmudullah c Collingwood b Swann 51
S. Hasan b Swann 1
S. Hossain not out 0.
Extras: (lb-7, w-1, n-1) 9
Total: (for 5 wickets) 154
Fall of wickets: 1-13, 2-27, 3-51, 4-145, 5-149.
To bat: M. Rahim, N. Islam, A. Razzak, Rubel Hossain
Bowling: Broad 10-1-30-2, Bresnan 10-1-47-0, Swann 14-5-40-3, Finn 5-1-30-0.